LRT13  1.0
 All Classes Namespaces Functions Variables Enumerations Enumerator
Shooter.h
1 #ifndef SHOOTER_H_
2 #define SHOOTER_H_
3 
4 #include <string>
5 
6 #include "Component.h"
7 #include "../ComponentData/RobotData.h"
8 #include "../Config/Configurable.h"
9 #include "../Log/Loggable.h"
10 #include "../Utils/PID.h"
11 #include "../ComponentData/DrivetrainData.h"
12 #include "../SpeedController/AsyncCANJaguar.h"
13 #include "../SpeedController/LRTTalon.h"
14 #include "../ComponentData/ShooterData.h"
15 #include "../Pneumatics/Pneumatics.h"
16 #include "DigitalInput.h"
17 #include "../Network/MessageType.h"
18 #include "../Utils/SmarterDashboard.h"
19 //#include "Relay.h"
20 #include "DigitalOutput.h"
21 #include "PWM.h"
22 #include "NetworkTables/NetworkTable.h"
23 
24 using namespace data;
25 
30 class Shooter : public Component, public Configurable, public Loggable
31 {
32 public:
33  Shooter();
34  ~Shooter();
35 
36  virtual void onEnable();
37  virtual void onDisable();
38 
39  virtual void enabledPeriodic();
40  virtual void disabledPeriodic();
41 
42  virtual void Configure();
43  virtual void Log();
44 
45  enum continuousFireState
46  {
47  FIRING_OFF = 0,
48  RETRACT_LOADER_WAIT_FOR_LIFT = 1,
49  RETRACT_LOADER_WAIT_FOR_FALL = 2,
50  EXTEND_LOADER = 3
51  };
52 
53 private:
54  void fubarDoDisabledPeriodic();
55 
56  void ManageShooterWheel(int roller);
57  void ConfigurePIDObject(PID *pid, std::string objName, bool feedForward); //TODO make this a util
58  string m_configSection;
59  ofstream m_inner_file;
60  ofstream m_outer_file;
61 
62  AsyncCANJaguar* m_jaguars[2];
63  Counter* m_encs[2];
64  LRTTalon* m_talons[2];
65 
66  Pneumatics* m_angler;
67  Pneumatics* m_pusher;
68  DigitalInput* m_proximity;
69  continuousFireState m_fireState;
70 
71  PID m_PIDs[2];
72  double m_errorsNormalized[2];
73  double m_errorIntegrals[2];
74 
75  int atSpeedCounter[2];
76 
77  double m_max_speed[2];
78  double m_target_speed[2];
79  double m_speed_setpoints[2][2];
80 
81  bool atSpeed[2];
82 
83  int requiredCyclesAtSpeed;
84  int requiredCyclesDown;
85  double acceptableSpeedErrorNormalized[2], m_speedsRPM[2], m_periods[2];
86  double m_maxNormalizedCurrent;
87  double frisbeeDetectionThreshold;
88  int startShotTime;
89 
90  int m_timer;
91  int m_ticks;
92 
93  int m_cyclesToContinueRetracting;
94 
95  Notifier m_sensorProcessingNotifier;
96 
97  DigitalOutput* m_flashlight; // Flashlight change
98  PWM* m_flashlightPWM;
99 
100  NetworkTable *table;
101 
102  static void DeNoiseSensorEntry(void *param);
103 
104  void DeNoiseSensor();
105 
106  int m_sensorDeNoisingCycle;
107  int firingWaitTicks;
108  int retractWait;
109  int extendWait;
110 #define NUM_SENSOR_VALS 5
111  DigitalInput* m_outerSensor;
112  int m_sensorVals[NUM_SENSOR_VALS];//400/50/2 + 1
113  bool m_sensorWindow;
114 
115  bool m_isSensorTrue;
116 
117  bool m_sensorOK;
118  int m_sensorStableTime;
119 
120  bool frisbeeExited;
121  bool frisbeeExitedLastCycle;
122  double m_flashlightBrightness;
123  int m_timeoutCounter;
124 };
125 
126 #endif