Mouse code for the MacroRat
main.h@26:d20f1adac2d3, 2017-05-21 (annotated)
- Committer:
- sahilmgandhi
- Date:
- Sun May 21 09:58:54 2017 +0000
- Revision:
- 26:d20f1adac2d3
- Parent:
- 20:82836745332e
- Child:
- 29:ec2c5a69acd6
Added floodfill to the code ... need to tune it now to get the wall array properly fixed!;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kyleliangus | 4:b5b7836ca2b0 | 1 | #ifndef MAIN_H |
kyleliangus | 4:b5b7836ca2b0 | 2 | #define MAIN_H |
kyleliangus | 4:b5b7836ca2b0 | 3 | |
kyleliangus | 4:b5b7836ca2b0 | 4 | #include "mbed.h" |
kyleliangus | 4:b5b7836ca2b0 | 5 | #include "ITG3200.h" |
kyleliangus | 9:1d8e4da058cd | 6 | #include "motor.h" |
vanshg | 11:8fc2b703086b | 7 | #include "QEI.h" |
sahilmgandhi | 26:d20f1adac2d3 | 8 | #include <stack> // std::stack |
sahilmgandhi | 26:d20f1adac2d3 | 9 | #include <utility> // std::pair, std::make_pair |
sahilmgandhi | 26:d20f1adac2d3 | 10 | |
vanshg | 11:8fc2b703086b | 11 | #define PULSES 3520 |
vanshg | 11:8fc2b703086b | 12 | #define SAMPLE_NUM 100 |
kyleliangus | 4:b5b7836ca2b0 | 13 | |
kyleliangus | 4:b5b7836ca2b0 | 14 | // Motors |
kyleliangus | 8:a0760acdc59e | 15 | /* |
kyleliangus | 4:b5b7836ca2b0 | 16 | PwmOut left1(PB_7); |
kyleliangus | 4:b5b7836ca2b0 | 17 | PwmOut left2(PB_8); |
kyleliangus | 4:b5b7836ca2b0 | 18 | PwmOut right1(PA_10); |
kyleliangus | 4:b5b7836ca2b0 | 19 | PwmOut right2(PA_11); |
kyleliangus | 4:b5b7836ca2b0 | 20 | |
sahilmgandhi | 7:6f5cb6377bd4 | 21 | DigitalOut enableLeftMotor(PB_4); |
sahilmgandhi | 7:6f5cb6377bd4 | 22 | DigitalOut enableRightMotor(PB_5); |
kyleliangus | 8:a0760acdc59e | 23 | */ |
sahilmgandhi | 7:6f5cb6377bd4 | 24 | |
kyleliangus | 4:b5b7836ca2b0 | 25 | // RGB LED |
kyleliangus | 4:b5b7836ca2b0 | 26 | DigitalOut redLed(PC_0); |
kyleliangus | 4:b5b7836ca2b0 | 27 | DigitalOut blueLed(PC_1); |
kyleliangus | 4:b5b7836ca2b0 | 28 | DigitalOut greenLed(PC_2); |
kyleliangus | 4:b5b7836ca2b0 | 29 | |
kyleliangus | 9:1d8e4da058cd | 30 | // IRPairs |
kyleliangus | 9:1d8e4da058cd | 31 | IRPair IRP_4( PB_1, PC_5 ); |
kyleliangus | 9:1d8e4da058cd | 32 | IRPair IRP_3( PB_13, PC_4 ); |
kyleliangus | 9:1d8e4da058cd | 33 | IRPair IRP_2( PB_0, PA_6 ); |
kyleliangus | 9:1d8e4da058cd | 34 | IRPair IRP_1( PB_14, PA_7 ); |
kyleliangus | 9:1d8e4da058cd | 35 | |
kyleliangus | 15:b80555a4a8b9 | 36 | Motor left_motor( PB_8, PB_7, PB_4 ); // forward, backwards, enable |
kyleliangus | 15:b80555a4a8b9 | 37 | Motor right_motor( PA_11, PA_10, PB_5 ); // forward, backwards, enable |
kyleliangus | 9:1d8e4da058cd | 38 | |
kyleliangus | 9:1d8e4da058cd | 39 | /* |
kyleliangus | 4:b5b7836ca2b0 | 40 | DigitalOut IR_1(PB_1); |
kyleliangus | 4:b5b7836ca2b0 | 41 | DigitalOut IR_2(PB_13); |
kyleliangus | 4:b5b7836ca2b0 | 42 | DigitalOut IR_3(PB_0); |
kyleliangus | 4:b5b7836ca2b0 | 43 | DigitalOut IR_4(PB_14); |
kyleliangus | 4:b5b7836ca2b0 | 44 | // Receivers |
kyleliangus | 4:b5b7836ca2b0 | 45 | AnalogIn Rec_1(PC_5); |
kyleliangus | 4:b5b7836ca2b0 | 46 | AnalogIn Rec_2(PC_4); |
kyleliangus | 4:b5b7836ca2b0 | 47 | AnalogIn Rec_3(PA_6); |
kyleliangus | 4:b5b7836ca2b0 | 48 | AnalogIn Rec_4(PA_7); |
kyleliangus | 9:1d8e4da058cd | 49 | */ |
kyleliangus | 4:b5b7836ca2b0 | 50 | |
kyleliangus | 4:b5b7836ca2b0 | 51 | // Doing DEBUGGING |
kyleliangus | 4:b5b7836ca2b0 | 52 | #define DEBUGGING 1 |
kyleliangus | 4:b5b7836ca2b0 | 53 | Serial serial(PC_6, PC_7); |
kyleliangus | 4:b5b7836ca2b0 | 54 | |
kyleliangus | 4:b5b7836ca2b0 | 55 | // Gyro |
kyleliangus | 4:b5b7836ca2b0 | 56 | ITG3200 gyro(PC_9, PA_8); |
kyleliangus | 4:b5b7836ca2b0 | 57 | |
kyleliangus | 4:b5b7836ca2b0 | 58 | volatile double reading = 0; |
kyleliangus | 4:b5b7836ca2b0 | 59 | |
kyleliangus | 4:b5b7836ca2b0 | 60 | int gyroX = 0; |
kyleliangus | 4:b5b7836ca2b0 | 61 | int gyroY = 0; |
kyleliangus | 4:b5b7836ca2b0 | 62 | int gyroZ = 0; |
kyleliangus | 4:b5b7836ca2b0 | 63 | |
vanshg | 10:810d1849da9d | 64 | InterruptIn dipButton1(PB_15); |
vanshg | 10:810d1849da9d | 65 | InterruptIn dipButton2(PB_10); |
vanshg | 10:810d1849da9d | 66 | InterruptIn dipButton3(PB_9); |
vanshg | 10:810d1849da9d | 67 | InterruptIn dipButton4(PB_12); |
vanshg | 10:810d1849da9d | 68 | |
vanshg | 10:810d1849da9d | 69 | void enableButton1(); |
vanshg | 10:810d1849da9d | 70 | void enableButton2(); |
vanshg | 10:810d1849da9d | 71 | void enableButton3(); |
vanshg | 10:810d1849da9d | 72 | void enableButton4(); |
vanshg | 10:810d1849da9d | 73 | void disableButton1(); |
vanshg | 10:810d1849da9d | 74 | void disableButton2(); |
vanshg | 10:810d1849da9d | 75 | void disableButton3(); |
vanshg | 10:810d1849da9d | 76 | void disableButton4(); |
vanshg | 10:810d1849da9d | 77 | |
sahilmgandhi | 26:d20f1adac2d3 | 78 | bool isWallInFront(int x, int y); |
sahilmgandhi | 26:d20f1adac2d3 | 79 | bool isWallInBack(int x, int y); |
sahilmgandhi | 26:d20f1adac2d3 | 80 | bool isWallOnRight(int x, int y); |
sahilmgandhi | 26:d20f1adac2d3 | 81 | bool isWallOnLeft(int x, int y); |
sahilmgandhi | 26:d20f1adac2d3 | 82 | |
sahilmgandhi | 26:d20f1adac2d3 | 83 | int chooseNextMovement(); |
sahilmgandhi | 26:d20f1adac2d3 | 84 | void changeManhattanDistance(bool headCenter); |
sahilmgandhi | 26:d20f1adac2d3 | 85 | bool hasVisited(int x, int y); |
sahilmgandhi | 26:d20f1adac2d3 | 86 | |
vanshg | 10:810d1849da9d | 87 | int dipFlags = 0; |
vanshg | 11:8fc2b703086b | 88 | #define BUTTON1_FLAG 0x1 |
vanshg | 11:8fc2b703086b | 89 | #define BUTTON2_FLAG 0x2 |
vanshg | 11:8fc2b703086b | 90 | #define BUTTON3_FLAG 0x4 |
vanshg | 11:8fc2b703086b | 91 | #define BUTTON4_FLAG 0x8 |
vanshg | 11:8fc2b703086b | 92 | |
sahilmgandhi | 17:f713758f6238 | 93 | int turnFlag = 0; |
sahilmgandhi | 17:f713758f6238 | 94 | #define LEFT_FLAG 0x1 |
sahilmgandhi | 17:f713758f6238 | 95 | #define RIGHT_FLAG 0x2 |
sahilmgandhi | 17:f713758f6238 | 96 | |
vanshg | 11:8fc2b703086b | 97 | QEI encoder0( PA_5, PB_3, NC, PULSES, QEI::X4_ENCODING ); |
vanshg | 11:8fc2b703086b | 98 | QEI encoder1( PA_1, PA_0, NC, PULSES, QEI::X4_ENCODING ); |
vanshg | 10:810d1849da9d | 99 | |
sahilmgandhi | 20:82836745332e | 100 | #define F_WALL 0x1 |
sahilmgandhi | 20:82836745332e | 101 | #define L_WALL 0x2 |
sahilmgandhi | 20:82836745332e | 102 | #define R_WALL 0x4 |
sahilmgandhi | 20:82836745332e | 103 | #define B_WALL 0x8 |
sahilmgandhi | 20:82836745332e | 104 | |
sahilmgandhi | 26:d20f1adac2d3 | 105 | #define MAZE_LEN 16 |
sahilmgandhi | 26:d20f1adac2d3 | 106 | |
sahilmgandhi | 26:d20f1adac2d3 | 107 | int mouseX = 0; |
sahilmgandhi | 26:d20f1adac2d3 | 108 | int mouseY = 0; |
sahilmgandhi | 26:d20f1adac2d3 | 109 | bool justTurned = false; |
sahilmgandhi | 26:d20f1adac2d3 | 110 | bool goingToCenter = true; |
sahilmgandhi | 26:d20f1adac2d3 | 111 | |
sahilmgandhi | 26:d20f1adac2d3 | 112 | stack< pair<int, int> > cellsToVisit; |
sahilmgandhi | 26:d20f1adac2d3 | 113 | |
sahilmgandhi | 26:d20f1adac2d3 | 114 | int currDir = 102; // modulo this to keep track of the current direction of the mouse! |
sahilmgandhi | 26:d20f1adac2d3 | 115 | // 0 = forward, 1 = right, 2 = down, 3 = left |
sahilmgandhi | 20:82836745332e | 116 | int wallArray[16][16] = {0}; // array to keep track of the walls |
sahilmgandhi | 26:d20f1adac2d3 | 117 | int visitedCells[16][16] = {0}; // array to keep track of the mouse's current location |
sahilmgandhi | 26:d20f1adac2d3 | 118 | int manhattanDistances[16][16] = { |
sahilmgandhi | 20:82836745332e | 119 | {14, 13, 12, 11, 10, 9, 8, 7, 7, 8, 9, 10, 11, 12, 13, 14}, |
sahilmgandhi | 20:82836745332e | 120 | {13, 12, 11, 10, 9, 8, 7, 6, 6, 7, 8, 9, 10, 11, 12, 13}, |
sahilmgandhi | 20:82836745332e | 121 | {12, 11, 10, 9, 8, 7, 6, 5, 5, 6, 7, 8, 9, 10, 11, 12}, |
sahilmgandhi | 20:82836745332e | 122 | {11, 10, 9, 8, 7, 6, 5, 4, 4, 5, 6, 7, 8, 9, 10, 11}, |
sahilmgandhi | 20:82836745332e | 123 | {10, 9, 8, 7, 6, 5, 4, 3, 3, 4, 5, 6, 7, 8, 9, 10}, |
sahilmgandhi | 20:82836745332e | 124 | {9, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 9}, |
sahilmgandhi | 20:82836745332e | 125 | {8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8}, |
sahilmgandhi | 20:82836745332e | 126 | {7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7}, |
sahilmgandhi | 20:82836745332e | 127 | {7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7}, |
sahilmgandhi | 20:82836745332e | 128 | {8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8}, |
sahilmgandhi | 20:82836745332e | 129 | {9, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 9}, |
sahilmgandhi | 20:82836745332e | 130 | {10, 9, 8, 7, 6, 5, 4, 3, 3, 4, 5, 6, 7, 8, 9, 10}, |
sahilmgandhi | 20:82836745332e | 131 | {11, 10, 9, 8, 7, 6, 5, 4, 4, 5, 6, 7, 8, 9, 10, 11}, |
sahilmgandhi | 20:82836745332e | 132 | {12, 11, 10, 9, 8, 7, 6, 5, 5, 6, 7, 8, 9, 10, 11, 12}, |
sahilmgandhi | 20:82836745332e | 133 | {13, 12, 11, 10, 9, 8, 7, 6, 6, 7, 8, 9, 10, 11, 12, 13}, |
sahilmgandhi | 20:82836745332e | 134 | {14, 13, 12, 11, 10, 9, 8, 7, 7, 8, 9, 10, 11, 12, 13, 14}, |
sahilmgandhi | 20:82836745332e | 135 | }; |
sahilmgandhi | 20:82836745332e | 136 | |
kyleliangus | 4:b5b7836ca2b0 | 137 | #endif |