package StateMachine; import java.util.prefs.Preferences; import NetworkComm.InputOutputComm; import Systems.NavXSensor; 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 { private String name; // 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.name = "<Gyro Angle Event>"; this.angleToTurn = angleToTurn; this.polarity = polarity; NavXSensor.initialize(); } // overloaded initialize method public void initialize() { //System.out.println("GyroAngleEvent initialized!"); NavXSensor.reset(); super.initialize(); } private double getGyroAngle() { //double gyroAngle = 0.0; //double gyroAngle = NavXSensor.getYaw(); // -180 deg to +180 deg double gyroAngle = NavXSensor.getAngle(); // continuous angle (can be larger than 360 deg) //System.out.println("autoPeriodicStraight: Gyro angle = " + gyroAngle); // send output data for test & debug InputOutputComm.putBoolean(InputOutputComm.LogTable.kMainLog,"Auto/IMU_Connected",NavXSensor.isConnected()); InputOutputComm.putBoolean(InputOutputComm.LogTable.kMainLog,"Auto/IMU_Calibrating",NavXSensor.isCalibrating()); String gyroAngleStr = String.format("%.2f", gyroAngle); String myString = new String("gyroAngle = " + gyroAngleStr); //System.out.println(myString); InputOutputComm.putString(InputOutputComm.LogTable.kMainLog,"Auto/GyroAngle", myString); return gyroAngle; } // overloaded trigger method public boolean isTriggered() { double gyroAngle = getGyroAngle(); if (polarity == AnglePolarity.kGreaterThan) { // trigger only if angle is greater than target if ((gyroAngle - angleToTurn) > 0) { System.out.println("GyroAngleEvent triggered!"); return true; } } else { // trigger only if angle is less than target if ((gyroAngle - angleToTurn) < 0) { System.out.println("GyroAngleEvent triggered!"); return true; } } return false; } public void persistWrite(int counter, Preferences prefs) { // create node for event Preferences eventPrefs = prefs.node(counter + "_" + this.name); // store event details eventPrefs.put("class",this.getClass().toString()); eventPrefs.putDouble("angleToTurn", this.angleToTurn); } }