package com.team254.frc2015.subsystems;
import com.team254.frc2015.subsystems.controllers.TimedOpenLoopController;
import com.team254.lib.util.*;
public class MotorPeacock extends Subsystem implements Loopable {
CheesySpeedController m_left_motor;
CheesySpeedController m_right_motor;
Controller m_controller = null;
public static final boolean s_using_peacock = true;
public MotorPeacock(CheesySpeedController left_motor, CheesySpeedController right_motor) {
super("MotorPeacock");
m_left_motor = left_motor;
m_right_motor = right_motor;
}
public void setUnsafeLeftRightPower(double left, double right) {
// left positive down
// right negative down
// input positive down
if (s_using_peacock) {
m_left_motor.set(left);
m_right_motor.set(right);
} else {
m_left_motor.set(0);
m_right_motor.set(0);
}
}
public synchronized void setPowerTimeSetpoint(double start_power, double time_start_power, double end_power, double time_to_decel) {
setUnsafeLeftRightPower(start_power, start_power); // power immediately!
m_controller = new TimedOpenLoopController(start_power, time_start_power, end_power, time_to_decel);
}
public synchronized void disableControlLoop() {
m_controller = null;
setUnsafeLeftRightPower(0, 0);
}
public void setOpenLoop(double left, double right) {
m_controller = null;
setUnsafeLeftRightPower(left, right);
}
@Override
public void reloadConstants() {
}
@Override
public void getState(StateHolder states) {
states.put("left_pwm", m_left_motor.get());
}
@Override
public synchronized void update() {
if (m_controller instanceof TimedOpenLoopController) {
TimedOpenLoopController c = (TimedOpenLoopController) m_controller;
double power = c.update();
setUnsafeLeftRightPower(power, power);
}
}
}