this code is completely restructured, but should do the same thing. did not want to directly commit, since it may not work at all. compiles though.

Dependencies:   AVEncoder mbed-src-AV

Fork of Test by 2015-2016_Mouserat

Revision:
13:5f08195456a4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mouse.h	Tue Dec 15 08:56:36 2015 +0000
@@ -0,0 +1,105 @@
+// HAS EVERYTHING RELATED TO THE MOUSE.
+// includes implementations from: 
+// mouse.cpp, which includes all motor related actions. 
+// sensors.cpp, which includes all sensor information. 
+// pid.cpp, which includes the pid constants/algorithm. 
+// maze.cpp? when that gets implemented in the future. 
+
+#ifndef MOUSE_H
+#define MOUSE_H
+
+#include "AVEncoder.h"
+
+typedef enum 
+{
+    LEFT, 
+    RIGHT,
+    AROUND, 
+    INVALID
+} TURN_DIRECTION;
+
+// this is just so that we can maintain what state our mouse is in. 
+// currently this has no real use, but it may in the future. 
+// or we could just remove this entirely. 
+typedef enum 
+{
+    STOPPED, 
+    FORWARD, 
+    TURNING,
+    MOVECELL,
+    FINISHED, 
+    UNKNOWN
+} STATE;
+
+class Mouse
+{
+public:
+    Mouse();
+    void stop();
+    void setForward( float left_speed, float right_speed );
+    void turn( TURN_DIRECTION dir = LEFT, int n_times = 1 );
+    void move_cell();
+    
+    void scan();
+    void sensor_reset();
+    void offsetCalc();
+    bool forward_wall_detected();
+    bool side_opening_detected();
+    
+    void run_pid();
+    void pid_reset();
+    
+    // TODO move into private eventually.
+    volatile TURN_DIRECTION turn_direction;
+    volatile STATE mouse_state;
+private:
+    // essential mouse information. 
+    volatile int row;
+    volatile int col;
+    
+    volatile float left_speed;
+    volatile float right_speed;
+    
+    // [-----------------------------------SENSOR INFORMATION-----------------------------------]
+    // [-------------------------------IMPLEMENTED IN SENSORS.CPP-------------------------------] 
+    void sensor_init();
+    
+    volatile float gyro_offset;
+
+    volatile float lf_val;
+    volatile float rf_val;
+    volatile float ls_val;
+    volatile float rs_val;
+    
+    volatile int wall_in_front;
+    volatile int opening_left_ahead;
+    volatile int opening_right_ahead;
+    volatile int opening_left;
+    volatile int opening_right;
+    
+    // [------------------------------------PID INFORMATION.------------------------------------]
+    // [---------------------------------IMPLEMENTED IN PID.CPP---------------------------------] 
+    // helper functions
+    float rotational_pid();
+    float translational_pid();
+    //void pid_reset();
+    
+    // helper data members. (not really needed to be shown - for implementation purposes)
+    volatile float line_prevError;
+    volatile float enco_prevError;
+    volatile float gyro_prevError;
+    
+    volatile float set_w;
+    volatile float set_x;
+    
+    volatile float spin_enco_weight;
+    volatile float spin_gyro_weight;
+    
+    // [-------------------------------------TEST FUNCTIONS-------------------------------------]
+    // [--------------------------------IMPLEMENTED IN TEST.CPP.--------------------------------] 
+    
+    void test_IR_sensors();
+    void test_motors();
+};
+
+#endif
\ No newline at end of file