package com.team254.frc2015.subsystems;
import com.team254.frc2015.Constants;
import com.team254.frc2015.subsystems.controllers.ElevatorSqueezeController;
import com.team254.lib.util.CheesySpeedController;
import com.team254.lib.util.StateHolder;
import edu.wpi.first.wpilibj.AnalogInput;
import edu.wpi.first.wpilibj.DigitalInput;
import edu.wpi.first.wpilibj.Encoder;
import edu.wpi.first.wpilibj.Solenoid;
public class TopCarriage extends ElevatorCarriage {
Solenoid m_pivot;
Solenoid m_grabber_open;
Solenoid m_grabber_close;
AnalogInput m_breakbeam;
public TopCarriage(String name, CheesySpeedController motor,
Solenoid brake, Encoder encoder, DigitalInput home, Solenoid pivot,
Solenoid grabber_open, Solenoid grabber_close, AnalogInput breakbeam) {
super(name, motor, brake, encoder, home, false);
m_pivot = pivot;
m_grabber_open = grabber_open;
m_grabber_close = grabber_close;
m_breakbeam = breakbeam;
}
public enum GrabberPositions {
OPEN, CLOSED, VENTED, BOTH
}
@Override
public void reloadConstants() {
m_limits.m_min_position = Constants.kTopCarriageMinPositionInches;
m_limits.m_max_position = Constants.kTopCarriageMaxPositionInches;
m_limits.m_home_position = Constants.kTopCarriageHomePositionInches;
m_limits.m_rezero_position = Constants.kTopCarriageReZeroPositionInches;
super.reloadConstants();
}
public void setPivotDown(boolean down) {
m_pivot.set(down);
}
public boolean getPivotDown() {
return m_pivot.get();
}
public void setGrabberPosition(GrabberPositions pos) {
m_grabber_open.set(pos == GrabberPositions.BOTH || pos == GrabberPositions.OPEN);
m_grabber_close.set(pos == GrabberPositions.BOTH || pos == GrabberPositions.CLOSED);
}
public boolean getGrabberOpen() {
return m_grabber_open.get();
}
public boolean hasSquezeEnabled() {
return m_controller instanceof ElevatorSqueezeController;
}
public boolean getBreakbeamTriggered() {
return m_breakbeam.getAverageVoltage() > Constants.kBreambeamVoltage;
}
@Override
public void getState(StateHolder states) {
super.getState(states);
states.put("breakbeam_voltage", m_breakbeam.getAverageVoltage());
states.put("breakbeam_state", getBreakbeamTriggered());
}
}