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

Committer:
jimmery
Date:
Tue Dec 15 08:56:36 2015 +0000
Revision:
13:5f08195456a4
HUGE RESTRUCTURING OF THE CODE.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jimmery 13:5f08195456a4 1 // HAS EVERYTHING RELATED TO THE MOUSE.
jimmery 13:5f08195456a4 2 // includes implementations from:
jimmery 13:5f08195456a4 3 // mouse.cpp, which includes all motor related actions.
jimmery 13:5f08195456a4 4 // sensors.cpp, which includes all sensor information.
jimmery 13:5f08195456a4 5 // pid.cpp, which includes the pid constants/algorithm.
jimmery 13:5f08195456a4 6 // maze.cpp? when that gets implemented in the future.
jimmery 13:5f08195456a4 7
jimmery 13:5f08195456a4 8 #ifndef MOUSE_H
jimmery 13:5f08195456a4 9 #define MOUSE_H
jimmery 13:5f08195456a4 10
jimmery 13:5f08195456a4 11 #include "AVEncoder.h"
jimmery 13:5f08195456a4 12
jimmery 13:5f08195456a4 13 typedef enum
jimmery 13:5f08195456a4 14 {
jimmery 13:5f08195456a4 15 LEFT,
jimmery 13:5f08195456a4 16 RIGHT,
jimmery 13:5f08195456a4 17 AROUND,
jimmery 13:5f08195456a4 18 INVALID
jimmery 13:5f08195456a4 19 } TURN_DIRECTION;
jimmery 13:5f08195456a4 20
jimmery 13:5f08195456a4 21 // this is just so that we can maintain what state our mouse is in.
jimmery 13:5f08195456a4 22 // currently this has no real use, but it may in the future.
jimmery 13:5f08195456a4 23 // or we could just remove this entirely.
jimmery 13:5f08195456a4 24 typedef enum
jimmery 13:5f08195456a4 25 {
jimmery 13:5f08195456a4 26 STOPPED,
jimmery 13:5f08195456a4 27 FORWARD,
jimmery 13:5f08195456a4 28 TURNING,
jimmery 13:5f08195456a4 29 MOVECELL,
jimmery 13:5f08195456a4 30 FINISHED,
jimmery 13:5f08195456a4 31 UNKNOWN
jimmery 13:5f08195456a4 32 } STATE;
jimmery 13:5f08195456a4 33
jimmery 13:5f08195456a4 34 class Mouse
jimmery 13:5f08195456a4 35 {
jimmery 13:5f08195456a4 36 public:
jimmery 13:5f08195456a4 37 Mouse();
jimmery 13:5f08195456a4 38 void stop();
jimmery 13:5f08195456a4 39 void setForward( float left_speed, float right_speed );
jimmery 13:5f08195456a4 40 void turn( TURN_DIRECTION dir = LEFT, int n_times = 1 );
jimmery 13:5f08195456a4 41 void move_cell();
jimmery 13:5f08195456a4 42
jimmery 13:5f08195456a4 43 void scan();
jimmery 13:5f08195456a4 44 void sensor_reset();
jimmery 13:5f08195456a4 45 void offsetCalc();
jimmery 13:5f08195456a4 46 bool forward_wall_detected();
jimmery 13:5f08195456a4 47 bool side_opening_detected();
jimmery 13:5f08195456a4 48
jimmery 13:5f08195456a4 49 void run_pid();
jimmery 13:5f08195456a4 50 void pid_reset();
jimmery 13:5f08195456a4 51
jimmery 13:5f08195456a4 52 // TODO move into private eventually.
jimmery 13:5f08195456a4 53 volatile TURN_DIRECTION turn_direction;
jimmery 13:5f08195456a4 54 volatile STATE mouse_state;
jimmery 13:5f08195456a4 55 private:
jimmery 13:5f08195456a4 56 // essential mouse information.
jimmery 13:5f08195456a4 57 volatile int row;
jimmery 13:5f08195456a4 58 volatile int col;
jimmery 13:5f08195456a4 59
jimmery 13:5f08195456a4 60 volatile float left_speed;
jimmery 13:5f08195456a4 61 volatile float right_speed;
jimmery 13:5f08195456a4 62
jimmery 13:5f08195456a4 63 // [-----------------------------------SENSOR INFORMATION-----------------------------------]
jimmery 13:5f08195456a4 64 // [-------------------------------IMPLEMENTED IN SENSORS.CPP-------------------------------]
jimmery 13:5f08195456a4 65 void sensor_init();
jimmery 13:5f08195456a4 66
jimmery 13:5f08195456a4 67 volatile float gyro_offset;
jimmery 13:5f08195456a4 68
jimmery 13:5f08195456a4 69 volatile float lf_val;
jimmery 13:5f08195456a4 70 volatile float rf_val;
jimmery 13:5f08195456a4 71 volatile float ls_val;
jimmery 13:5f08195456a4 72 volatile float rs_val;
jimmery 13:5f08195456a4 73
jimmery 13:5f08195456a4 74 volatile int wall_in_front;
jimmery 13:5f08195456a4 75 volatile int opening_left_ahead;
jimmery 13:5f08195456a4 76 volatile int opening_right_ahead;
jimmery 13:5f08195456a4 77 volatile int opening_left;
jimmery 13:5f08195456a4 78 volatile int opening_right;
jimmery 13:5f08195456a4 79
jimmery 13:5f08195456a4 80 // [------------------------------------PID INFORMATION.------------------------------------]
jimmery 13:5f08195456a4 81 // [---------------------------------IMPLEMENTED IN PID.CPP---------------------------------]
jimmery 13:5f08195456a4 82 // helper functions
jimmery 13:5f08195456a4 83 float rotational_pid();
jimmery 13:5f08195456a4 84 float translational_pid();
jimmery 13:5f08195456a4 85 //void pid_reset();
jimmery 13:5f08195456a4 86
jimmery 13:5f08195456a4 87 // helper data members. (not really needed to be shown - for implementation purposes)
jimmery 13:5f08195456a4 88 volatile float line_prevError;
jimmery 13:5f08195456a4 89 volatile float enco_prevError;
jimmery 13:5f08195456a4 90 volatile float gyro_prevError;
jimmery 13:5f08195456a4 91
jimmery 13:5f08195456a4 92 volatile float set_w;
jimmery 13:5f08195456a4 93 volatile float set_x;
jimmery 13:5f08195456a4 94
jimmery 13:5f08195456a4 95 volatile float spin_enco_weight;
jimmery 13:5f08195456a4 96 volatile float spin_gyro_weight;
jimmery 13:5f08195456a4 97
jimmery 13:5f08195456a4 98 // [-------------------------------------TEST FUNCTIONS-------------------------------------]
jimmery 13:5f08195456a4 99 // [--------------------------------IMPLEMENTED IN TEST.CPP.--------------------------------]
jimmery 13:5f08195456a4 100
jimmery 13:5f08195456a4 101 void test_IR_sensors();
jimmery 13:5f08195456a4 102 void test_motors();
jimmery 13:5f08195456a4 103 };
jimmery 13:5f08195456a4 104
jimmery 13:5f08195456a4 105 #endif