Serpentine / Mbed 2 deprecated serpentine_snakecontroller_final

Dependencies:   MMA8451Q TSI mbed

Fork of snakecontroller by Serpentine

Committer:
danlock10y
Date:
Thu Jun 09 14:38:05 2016 +0000
Revision:
7:292f2de3c013
Parent:
6:44bac63d4d66
Child:
8:93190b81ceca
LED display updated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pemb4660 0:c5a6d47904dc 1 #include "mbed.h"
pemb4660 0:c5a6d47904dc 2 #include "TSISensor.h"
pemb4660 0:c5a6d47904dc 3 #include "MMA8451Q.h"
pemb4660 0:c5a6d47904dc 4
pemb4660 0:c5a6d47904dc 5 #define MMA8451_I2C_ADDRESS (0x1d<<1)
pemb4660 0:c5a6d47904dc 6 Serial pc(USBTX, USBRX); // tx, rx
pemb4660 0:c5a6d47904dc 7
danlock10y 1:6dd9eca697db 8 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); //Setup accelerometer
danlock10y 6:44bac63d4d66 9 DigitalOut lefthigh(PTC7); //Test LED for left
danlock10y 6:44bac63d4d66 10 DigitalOut leftlow(PTA1);
danlock10y 6:44bac63d4d66 11 DigitalOut righthigh(PTC4); //Test LED for right
danlock10y 6:44bac63d4d66 12 DigitalOut rightlow(PTA12);
danlock10y 6:44bac63d4d66 13 DigitalOut forwardhigh(PTC0); //Test LED for forward
danlock10y 6:44bac63d4d66 14 DigitalOut forwardlow(PTC3);
danlock10y 6:44bac63d4d66 15 DigitalOut backwardhigh(PTA2); //Test LED for backward
danlock10y 6:44bac63d4d66 16 DigitalOut backwardlow(PTD4);
danlock10y 1:6dd9eca697db 17
danlock10y 1:6dd9eca697db 18 int Direction; //2 bit number to describe direction 0 forward assigned CW
danlock10y 1:6dd9eca697db 19
danlock10y 1:6dd9eca697db 20 bool right; //Right or left? right = 1
danlock10y 1:6dd9eca697db 21 bool forward; //Forward or Backward? forward = 1
danlock10y 1:6dd9eca697db 22
pemb4660 0:c5a6d47904dc 23 int main()
pemb4660 0:c5a6d47904dc 24 {
danlock10y 1:6dd9eca697db 25 while (1)
danlock10y 1:6dd9eca697db 26 {
danlock10y 3:768cca7d53fe 27
danlock10y 3:768cca7d53fe 28 float accX=acc.getAccX(); //Measure acceleration in X direction
danlock10y 3:768cca7d53fe 29 float accY=acc.getAccY(); //Measure acceleration in Y direction
danlock10y 6:44bac63d4d66 30
danlock10y 1:6dd9eca697db 31 if (accX > 0.1)
danlock10y 1:6dd9eca697db 32 {
danlock10y 3:768cca7d53fe 33 right = false;
danlock10y 6:44bac63d4d66 34 //printf("left \r\n");
danlock10y 1:6dd9eca697db 35 }//endif
pemb4660 0:c5a6d47904dc 36
danlock10y 1:6dd9eca697db 37 if (accX < -0.1)
danlock10y 1:6dd9eca697db 38 {
danlock10y 3:768cca7d53fe 39 right = true;
danlock10y 6:44bac63d4d66 40 //printf("right \r\n");
danlock10y 1:6dd9eca697db 41 }//endif
danlock10y 3:768cca7d53fe 42 wait(0.1);
danlock10y 1:6dd9eca697db 43
danlock10y 3:768cca7d53fe 44 if (accY > 0.1)
danlock10y 1:6dd9eca697db 45 {
danlock10y 3:768cca7d53fe 46 forward = false;
danlock10y 6:44bac63d4d66 47 //printf("back \r\n");
danlock10y 1:6dd9eca697db 48 }//endif
pemb4660 0:c5a6d47904dc 49
danlock10y 3:768cca7d53fe 50 if (accY < -0.1)
danlock10y 1:6dd9eca697db 51 {
danlock10y 3:768cca7d53fe 52 forward = true;
danlock10y 6:44bac63d4d66 53 //printf("for \r\n");
danlock10y 1:6dd9eca697db 54 }//endif
danlock10y 3:768cca7d53fe 55
danlock10y 3:768cca7d53fe 56 wait(0.1);
danlock10y 3:768cca7d53fe 57
danlock10y 4:1961b60aa8fb 58 if(abs(accY) > abs(accX))
danlock10y 3:768cca7d53fe 59 {
danlock10y 4:1961b60aa8fb 60 if(forward == true)
danlock10y 4:1961b60aa8fb 61 {
danlock10y 4:1961b60aa8fb 62 Direction = 0;
danlock10y 6:44bac63d4d66 63
danlock10y 6:44bac63d4d66 64 lefthigh = 0;
danlock10y 6:44bac63d4d66 65 leftlow = 0;
danlock10y 6:44bac63d4d66 66 righthigh = 0;
danlock10y 6:44bac63d4d66 67 rightlow = 0;
danlock10y 6:44bac63d4d66 68 forwardhigh = 1;
danlock10y 6:44bac63d4d66 69 forwardlow = 0;
danlock10y 6:44bac63d4d66 70 backwardhigh = 0;
danlock10y 6:44bac63d4d66 71 backwardlow = 0;
danlock10y 6:44bac63d4d66 72
danlock10y 4:1961b60aa8fb 73 }//endif
danlock10y 4:1961b60aa8fb 74 else
danlock10y 3:768cca7d53fe 75 {
danlock10y 6:44bac63d4d66 76 Direction = 2;
danlock10y 6:44bac63d4d66 77
danlock10y 6:44bac63d4d66 78 lefthigh = 0;
danlock10y 6:44bac63d4d66 79 leftlow = 0;
danlock10y 6:44bac63d4d66 80 righthigh = 0;
danlock10y 6:44bac63d4d66 81 rightlow = 0;
danlock10y 6:44bac63d4d66 82 forwardhigh = 0;
danlock10y 6:44bac63d4d66 83 forwardlow = 0;
danlock10y 6:44bac63d4d66 84 backwardhigh = 1;
danlock10y 6:44bac63d4d66 85 backwardlow = 0;
danlock10y 6:44bac63d4d66 86
danlock10y 4:1961b60aa8fb 87 }//endelse
danlock10y 4:1961b60aa8fb 88 }//endif
danlock10y 4:1961b60aa8fb 89 else
danlock10y 4:1961b60aa8fb 90 {
danlock10y 4:1961b60aa8fb 91 if(right == true)
danlock10y 4:1961b60aa8fb 92 {
danlock10y 6:44bac63d4d66 93 Direction = 1;
danlock10y 6:44bac63d4d66 94
danlock10y 6:44bac63d4d66 95 lefthigh = 0;
danlock10y 6:44bac63d4d66 96 leftlow = 0;
danlock10y 6:44bac63d4d66 97 righthigh = 1;
danlock10y 6:44bac63d4d66 98 rightlow = 0;
danlock10y 6:44bac63d4d66 99 forwardhigh = 0;
danlock10y 6:44bac63d4d66 100 forwardlow = 0;
danlock10y 6:44bac63d4d66 101 backwardhigh = 0;
danlock10y 6:44bac63d4d66 102 backwardlow = 0;
danlock10y 6:44bac63d4d66 103
danlock10y 4:1961b60aa8fb 104 }//endif
danlock10y 4:1961b60aa8fb 105 else
danlock10y 4:1961b60aa8fb 106 {
danlock10y 6:44bac63d4d66 107 Direction = 3;
danlock10y 6:44bac63d4d66 108
danlock10y 6:44bac63d4d66 109 lefthigh = 1;
danlock10y 6:44bac63d4d66 110 leftlow = 0;
danlock10y 6:44bac63d4d66 111 righthigh = 0;
danlock10y 6:44bac63d4d66 112 rightlow = 0;
danlock10y 6:44bac63d4d66 113 forwardhigh = 0;
danlock10y 6:44bac63d4d66 114 forwardlow = 0;
danlock10y 6:44bac63d4d66 115 backwardhigh = 0;
danlock10y 6:44bac63d4d66 116 backwardlow = 0;
danlock10y 6:44bac63d4d66 117
danlock10y 4:1961b60aa8fb 118 }//endelse
danlock10y 4:1961b60aa8fb 119 }//endelse
danlock10y 4:1961b60aa8fb 120
danlock10y 4:1961b60aa8fb 121 printf("Direction = %d \r\n", Direction);
danlock10y 4:1961b60aa8fb 122
danlock10y 1:6dd9eca697db 123 }//endwhile
danlock10y 1:6dd9eca697db 124 }//endmain