Serpentine / Mbed 2 deprecated serpentine_snakecontroller_final

Dependencies:   MMA8451Q TSI mbed

Fork of snakecontroller by Serpentine

Committer:
danlock10y
Date:
Thu Jun 09 14:34:08 2016 +0000
Revision:
6:44bac63d4d66
Parent:
5:97c02241511c
Child:
7:292f2de3c013
New LED layout to indicate direction

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 float accX=acc.getAccX(); //Measure acceleration in X direction
danlock10y 1:6dd9eca697db 19 float accY=acc.getAccY(); //Measure acceleration in Y direction
danlock10y 1:6dd9eca697db 20
danlock10y 1:6dd9eca697db 21 int Direction; //2 bit number to describe direction 0 forward assigned CW
danlock10y 1:6dd9eca697db 22
danlock10y 1:6dd9eca697db 23 bool right; //Right or left? right = 1
danlock10y 1:6dd9eca697db 24 bool forward; //Forward or Backward? forward = 1
danlock10y 1:6dd9eca697db 25
pemb4660 0:c5a6d47904dc 26 int main()
pemb4660 0:c5a6d47904dc 27 {
danlock10y 1:6dd9eca697db 28 while (1)
danlock10y 1:6dd9eca697db 29 {
danlock10y 3:768cca7d53fe 30
danlock10y 3:768cca7d53fe 31 float accX=acc.getAccX(); //Measure acceleration in X direction
danlock10y 3:768cca7d53fe 32 float accY=acc.getAccY(); //Measure acceleration in Y direction
danlock10y 6:44bac63d4d66 33
danlock10y 1:6dd9eca697db 34 if (accX > 0.1)
danlock10y 1:6dd9eca697db 35 {
danlock10y 3:768cca7d53fe 36 right = false;
danlock10y 6:44bac63d4d66 37 //printf("left \r\n");
danlock10y 1:6dd9eca697db 38 }//endif
pemb4660 0:c5a6d47904dc 39
danlock10y 1:6dd9eca697db 40 if (accX < -0.1)
danlock10y 1:6dd9eca697db 41 {
danlock10y 3:768cca7d53fe 42 right = true;
danlock10y 6:44bac63d4d66 43 //printf("right \r\n");
danlock10y 1:6dd9eca697db 44 }//endif
danlock10y 3:768cca7d53fe 45 wait(0.1);
danlock10y 1:6dd9eca697db 46
danlock10y 3:768cca7d53fe 47 if (accY > 0.1)
danlock10y 1:6dd9eca697db 48 {
danlock10y 3:768cca7d53fe 49 forward = false;
danlock10y 6:44bac63d4d66 50 //printf("back \r\n");
danlock10y 1:6dd9eca697db 51 }//endif
pemb4660 0:c5a6d47904dc 52
danlock10y 3:768cca7d53fe 53 if (accY < -0.1)
danlock10y 1:6dd9eca697db 54 {
danlock10y 3:768cca7d53fe 55 forward = true;
danlock10y 6:44bac63d4d66 56 //printf("for \r\n");
danlock10y 1:6dd9eca697db 57 }//endif
danlock10y 3:768cca7d53fe 58
danlock10y 3:768cca7d53fe 59 wait(0.1);
danlock10y 3:768cca7d53fe 60
danlock10y 4:1961b60aa8fb 61 if(abs(accY) > abs(accX))
danlock10y 3:768cca7d53fe 62 {
danlock10y 4:1961b60aa8fb 63 if(forward == true)
danlock10y 4:1961b60aa8fb 64 {
danlock10y 4:1961b60aa8fb 65 Direction = 0;
danlock10y 6:44bac63d4d66 66
danlock10y 6:44bac63d4d66 67 lefthigh = 0;
danlock10y 6:44bac63d4d66 68 leftlow = 0;
danlock10y 6:44bac63d4d66 69 righthigh = 0;
danlock10y 6:44bac63d4d66 70 rightlow = 0;
danlock10y 6:44bac63d4d66 71 forwardhigh = 1;
danlock10y 6:44bac63d4d66 72 forwardlow = 0;
danlock10y 6:44bac63d4d66 73 backwardhigh = 0;
danlock10y 6:44bac63d4d66 74 backwardlow = 0;
danlock10y 6:44bac63d4d66 75
danlock10y 4:1961b60aa8fb 76 }//endif
danlock10y 4:1961b60aa8fb 77 else
danlock10y 3:768cca7d53fe 78 {
danlock10y 6:44bac63d4d66 79 Direction = 2;
danlock10y 6:44bac63d4d66 80
danlock10y 6:44bac63d4d66 81 lefthigh = 0;
danlock10y 6:44bac63d4d66 82 leftlow = 0;
danlock10y 6:44bac63d4d66 83 righthigh = 0;
danlock10y 6:44bac63d4d66 84 rightlow = 0;
danlock10y 6:44bac63d4d66 85 forwardhigh = 0;
danlock10y 6:44bac63d4d66 86 forwardlow = 0;
danlock10y 6:44bac63d4d66 87 backwardhigh = 1;
danlock10y 6:44bac63d4d66 88 backwardlow = 0;
danlock10y 6:44bac63d4d66 89
danlock10y 4:1961b60aa8fb 90 }//endelse
danlock10y 4:1961b60aa8fb 91 }//endif
danlock10y 4:1961b60aa8fb 92 else
danlock10y 4:1961b60aa8fb 93 {
danlock10y 4:1961b60aa8fb 94 if(right == true)
danlock10y 4:1961b60aa8fb 95 {
danlock10y 6:44bac63d4d66 96 Direction = 1;
danlock10y 6:44bac63d4d66 97
danlock10y 6:44bac63d4d66 98 lefthigh = 0;
danlock10y 6:44bac63d4d66 99 leftlow = 0;
danlock10y 6:44bac63d4d66 100 righthigh = 1;
danlock10y 6:44bac63d4d66 101 rightlow = 0;
danlock10y 6:44bac63d4d66 102 forwardhigh = 0;
danlock10y 6:44bac63d4d66 103 forwardlow = 0;
danlock10y 6:44bac63d4d66 104 backwardhigh = 0;
danlock10y 6:44bac63d4d66 105 backwardlow = 0;
danlock10y 6:44bac63d4d66 106
danlock10y 4:1961b60aa8fb 107 }//endif
danlock10y 4:1961b60aa8fb 108 else
danlock10y 4:1961b60aa8fb 109 {
danlock10y 6:44bac63d4d66 110 Direction = 3;
danlock10y 6:44bac63d4d66 111
danlock10y 6:44bac63d4d66 112 lefthigh = 1;
danlock10y 6:44bac63d4d66 113 leftlow = 0;
danlock10y 6:44bac63d4d66 114 righthigh = 0;
danlock10y 6:44bac63d4d66 115 rightlow = 0;
danlock10y 6:44bac63d4d66 116 forwardhigh = 0;
danlock10y 6:44bac63d4d66 117 forwardlow = 0;
danlock10y 6:44bac63d4d66 118 backwardhigh = 0;
danlock10y 6:44bac63d4d66 119 backwardlow = 0;
danlock10y 6:44bac63d4d66 120
danlock10y 4:1961b60aa8fb 121 }//endelse
danlock10y 4:1961b60aa8fb 122 }//endelse
danlock10y 4:1961b60aa8fb 123
danlock10y 4:1961b60aa8fb 124 printf("Direction = %d \r\n", Direction);
danlock10y 4:1961b60aa8fb 125
danlock10y 1:6dd9eca697db 126 }//endwhile
danlock10y 1:6dd9eca697db 127 }//endmain