package canStateMachine; import Systems.GyroSensor; import edu.wpi.first.wpilibj.AnalogGyro; import edu.wpi.first.wpilibj.Utility; // event triggered when gyro gets to a certain predetermined angle public class GyroAngleEvent extends Event { // which side of the gyro angle determines the trigger public enum AnglePolarity { kGreaterThan, kLessThan }; private double angleToTurn = 0.0; private double accuracyDeg = 5.0; private AnglePolarity polarity; public GyroAngleEvent(double angleToTurn, AnglePolarity polarity) { this.angleToTurn = angleToTurn; this.polarity = polarity; GyroSensor.initialize(); } // overloaded initialize method public void initialize() { //System.out.println("GyroAngleEvent initialized!"); GyroSensor.reset(); super.initialize(); } // overloaded trigger method public boolean isTriggered() { //System.out.println("angle = " + myGyro.getAngle() + " angleToTurn = " + angleToTurn); /* * old code - possible to move past angle and NOT trigger! if (Math.abs(GyroSensor.getAngle() - angleToTurn) < accuracyDeg) { System.out.println("GyroAngleEvent triggered!"); return true; } */ if (polarity == AnglePolarity.kGreaterThan) { // trigger only if angle is greater than target if ((GyroSensor.getAngle() - angleToTurn) > 0) { System.out.println("GyroAngleEvent triggered!"); return true; } } else { // trigger only if angle is less than target if ((GyroSensor.getAngle() - angleToTurn) < 0) { System.out.println("GyroAngleEvent triggered!"); return true; } } return false; } }