Manuel Campos
/
Accelerometer_Part2_cvmanuel
initial version
Fork of Accelerometer_example by
main.cpp@3:d3a5c64bbcf9, 2018-02-22 (annotated)
- Committer:
- cvmanuel
- Date:
- Thu Feb 22 14:58:13 2018 +0000
- Revision:
- 3:d3a5c64bbcf9
- Parent:
- 2:ca0eb23626c5
changes;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WilliamMarshQMUL | 0:a1caba5c4e48 | 1 | #include "mbed.h" |
WilliamMarshQMUL | 0:a1caba5c4e48 | 2 | #include "rtos.h" |
WilliamMarshQMUL | 0:a1caba5c4e48 | 3 | #include "MMA8451Q.h" |
WilliamMarshQMUL | 0:a1caba5c4e48 | 4 | |
WilliamMarshQMUL | 0:a1caba5c4e48 | 5 | PinName const SDA = PTE25; |
WilliamMarshQMUL | 0:a1caba5c4e48 | 6 | PinName const SCL = PTE24; |
WilliamMarshQMUL | 0:a1caba5c4e48 | 7 | |
WilliamMarshQMUL | 0:a1caba5c4e48 | 8 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
cvmanuel | 2:ca0eb23626c5 | 9 | |
cvmanuel | 2:ca0eb23626c5 | 10 | Thread pollT; |
cvmanuel | 2:ca0eb23626c5 | 11 | Timer timer; |
cvmanuel | 2:ca0eb23626c5 | 12 | Ticker tick; |
cvmanuel | 2:ca0eb23626c5 | 13 | |
cvmanuel | 3:d3a5c64bbcf9 | 14 | enum accelerometerPos { flat, left, right, up, down, over, failure, trigger }; |
cvmanuel | 2:ca0eb23626c5 | 15 | |
WilliamMarshQMUL | 0:a1caba5c4e48 | 16 | |
WilliamMarshQMUL | 0:a1caba5c4e48 | 17 | int main(void) |
WilliamMarshQMUL | 0:a1caba5c4e48 | 18 | { |
WilliamMarshQMUL | 0:a1caba5c4e48 | 19 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
WilliamMarshQMUL | 0:a1caba5c4e48 | 20 | PwmOut rled(LED1); |
WilliamMarshQMUL | 0:a1caba5c4e48 | 21 | PwmOut gled(LED2); |
WilliamMarshQMUL | 0:a1caba5c4e48 | 22 | PwmOut bled(LED3); |
WilliamMarshQMUL | 0:a1caba5c4e48 | 23 | Serial pc(USBTX, USBRX); // tx, rx |
cvmanuel | 2:ca0eb23626c5 | 24 | float threshold = .50; |
cvmanuel | 2:ca0eb23626c5 | 25 | float min_threshold = 0.25; |
cvmanuel | 2:ca0eb23626c5 | 26 | |
WilliamMarshQMUL | 0:a1caba5c4e48 | 27 | |
WilliamMarshQMUL | 0:a1caba5c4e48 | 28 | |
cvmanuel | 3:d3a5c64bbcf9 | 29 | |
WilliamMarshQMUL | 0:a1caba5c4e48 | 30 | pc.printf("MMA8451 ID: %d\n", acc.getWhoAmI()); |
cvmanuel | 3:d3a5c64bbcf9 | 31 | |
cvmanuel | 3:d3a5c64bbcf9 | 32 | accelerometerPos pos = flat; |
cvmanuel | 3:d3a5c64bbcf9 | 33 | bool restart = true; |
WilliamMarshQMUL | 0:a1caba5c4e48 | 34 | |
WilliamMarshQMUL | 0:a1caba5c4e48 | 35 | while (true) { |
WilliamMarshQMUL | 0:a1caba5c4e48 | 36 | float x, y, z; |
WilliamMarshQMUL | 0:a1caba5c4e48 | 37 | x = acc.getAccX(); |
WilliamMarshQMUL | 0:a1caba5c4e48 | 38 | y = acc.getAccY(); |
WilliamMarshQMUL | 0:a1caba5c4e48 | 39 | z = acc.getAccZ(); |
cvmanuel | 3:d3a5c64bbcf9 | 40 | |
cvmanuel | 2:ca0eb23626c5 | 41 | |
cvmanuel | 3:d3a5c64bbcf9 | 42 | if(pos!=trigger){ |
cvmanuel | 2:ca0eb23626c5 | 43 | |
cvmanuel | 2:ca0eb23626c5 | 44 | if(z>threshold && abs(x)< min_threshold && abs(y)< min_threshold) |
cvmanuel | 2:ca0eb23626c5 | 45 | { |
cvmanuel | 3:d3a5c64bbcf9 | 46 | if(pos==failure) |
cvmanuel | 3:d3a5c64bbcf9 | 47 | { |
cvmanuel | 3:d3a5c64bbcf9 | 48 | if(restart){ |
cvmanuel | 3:d3a5c64bbcf9 | 49 | timer.reset(); |
cvmanuel | 3:d3a5c64bbcf9 | 50 | timer.start(); |
cvmanuel | 3:d3a5c64bbcf9 | 51 | restart = false; |
cvmanuel | 3:d3a5c64bbcf9 | 52 | } |
cvmanuel | 3:d3a5c64bbcf9 | 53 | if(timer.read()>=10) |
cvmanuel | 3:d3a5c64bbcf9 | 54 | { |
cvmanuel | 3:d3a5c64bbcf9 | 55 | rled=0; |
cvmanuel | 3:d3a5c64bbcf9 | 56 | gled=0; |
cvmanuel | 3:d3a5c64bbcf9 | 57 | bled=0; |
cvmanuel | 3:d3a5c64bbcf9 | 58 | pos= flat; |
cvmanuel | 3:d3a5c64bbcf9 | 59 | timer.reset(); |
cvmanuel | 3:d3a5c64bbcf9 | 60 | restart = true; |
cvmanuel | 3:d3a5c64bbcf9 | 61 | |
cvmanuel | 3:d3a5c64bbcf9 | 62 | } |
cvmanuel | 3:d3a5c64bbcf9 | 63 | }else |
cvmanuel | 3:d3a5c64bbcf9 | 64 | if(pos==up && timer.read()>=4 && timer.read()<=8) |
cvmanuel | 3:d3a5c64bbcf9 | 65 | { |
cvmanuel | 3:d3a5c64bbcf9 | 66 | rled=1; |
cvmanuel | 3:d3a5c64bbcf9 | 67 | gled=0; |
cvmanuel | 3:d3a5c64bbcf9 | 68 | bled=1; |
cvmanuel | 3:d3a5c64bbcf9 | 69 | pc.printf("TRIGGER!!!!\n\r"); |
cvmanuel | 3:d3a5c64bbcf9 | 70 | pc.printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n\r", x, y, z); |
cvmanuel | 3:d3a5c64bbcf9 | 71 | pc.printf("Time taken was: %f \n\r",timer.read()); |
cvmanuel | 3:d3a5c64bbcf9 | 72 | pos = trigger; |
cvmanuel | 3:d3a5c64bbcf9 | 73 | |
cvmanuel | 3:d3a5c64bbcf9 | 74 | }else if(pos!=trigger){ |
cvmanuel | 3:d3a5c64bbcf9 | 75 | pc.printf("FLAT\n\r"); |
cvmanuel | 3:d3a5c64bbcf9 | 76 | pc.printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n\r", x, y, z); |
cvmanuel | 3:d3a5c64bbcf9 | 77 | timer.start(); |
cvmanuel | 3:d3a5c64bbcf9 | 78 | pos = flat; |
cvmanuel | 3:d3a5c64bbcf9 | 79 | pc.printf("Time taken was: %f \n\r",timer.read()); |
cvmanuel | 3:d3a5c64bbcf9 | 80 | } |
cvmanuel | 3:d3a5c64bbcf9 | 81 | |
cvmanuel | 2:ca0eb23626c5 | 82 | |
cvmanuel | 2:ca0eb23626c5 | 83 | }else |
cvmanuel | 2:ca0eb23626c5 | 84 | if(y<-threshold && abs(z)<min_threshold && abs(x)<min_threshold) |
cvmanuel | 2:ca0eb23626c5 | 85 | { |
cvmanuel | 3:d3a5c64bbcf9 | 86 | if(pos==flat && timer.read()>=10) |
cvmanuel | 3:d3a5c64bbcf9 | 87 | { |
cvmanuel | 3:d3a5c64bbcf9 | 88 | pc.printf("RIGHT\n\r"); |
cvmanuel | 3:d3a5c64bbcf9 | 89 | pc.printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n\r", x, y, z); |
cvmanuel | 3:d3a5c64bbcf9 | 90 | pc.printf("The time taken was: %f seconds\n\r",timer.read()); |
cvmanuel | 3:d3a5c64bbcf9 | 91 | pos = right; |
cvmanuel | 3:d3a5c64bbcf9 | 92 | timer.reset(); |
cvmanuel | 3:d3a5c64bbcf9 | 93 | timer.start(); |
cvmanuel | 3:d3a5c64bbcf9 | 94 | }else if(pos!=right){ |
cvmanuel | 3:d3a5c64bbcf9 | 95 | rled=0; |
cvmanuel | 3:d3a5c64bbcf9 | 96 | gled=1; |
cvmanuel | 3:d3a5c64bbcf9 | 97 | bled=1; |
cvmanuel | 3:d3a5c64bbcf9 | 98 | pc.printf("ERROR in time sequence, time taken: %f \n\r",timer.read()); |
cvmanuel | 3:d3a5c64bbcf9 | 99 | pos = failure; |
cvmanuel | 3:d3a5c64bbcf9 | 100 | } |
cvmanuel | 3:d3a5c64bbcf9 | 101 | |
cvmanuel | 3:d3a5c64bbcf9 | 102 | pc.printf("The time taken was: %f seconds\n\r",timer.read()); |
cvmanuel | 3:d3a5c64bbcf9 | 103 | |
cvmanuel | 3:d3a5c64bbcf9 | 104 | }else |
cvmanuel | 3:d3a5c64bbcf9 | 105 | if(x< -threshold && abs(z)<min_threshold && abs(y)<min_threshold) |
cvmanuel | 3:d3a5c64bbcf9 | 106 | { |
cvmanuel | 3:d3a5c64bbcf9 | 107 | if(pos == right && timer.read()>=2 && timer.read()<=6) |
cvmanuel | 3:d3a5c64bbcf9 | 108 | { |
cvmanuel | 3:d3a5c64bbcf9 | 109 | pc.printf("UP\n\r"); |
cvmanuel | 3:d3a5c64bbcf9 | 110 | pc.printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n\r", x, y, z); |
cvmanuel | 3:d3a5c64bbcf9 | 111 | pc.printf("The time taken was: %f seconds\n\r",timer.read()); |
cvmanuel | 3:d3a5c64bbcf9 | 112 | pos = up; |
cvmanuel | 3:d3a5c64bbcf9 | 113 | timer.reset(); |
cvmanuel | 3:d3a5c64bbcf9 | 114 | timer.start(); |
cvmanuel | 3:d3a5c64bbcf9 | 115 | }else if(pos!=up) { |
cvmanuel | 3:d3a5c64bbcf9 | 116 | rled=0; |
cvmanuel | 3:d3a5c64bbcf9 | 117 | gled=1; |
cvmanuel | 3:d3a5c64bbcf9 | 118 | bled=1; |
cvmanuel | 3:d3a5c64bbcf9 | 119 | pc.printf("ERROR in time sequence, time taken: %f \n\r",timer.read()); |
cvmanuel | 3:d3a5c64bbcf9 | 120 | pos = failure; |
cvmanuel | 3:d3a5c64bbcf9 | 121 | } |
cvmanuel | 2:ca0eb23626c5 | 122 | pc.printf("The time taken was: %f seconds\n\r",timer.read()); |
cvmanuel | 3:d3a5c64bbcf9 | 123 | } |
cvmanuel | 2:ca0eb23626c5 | 124 | } |
cvmanuel | 2:ca0eb23626c5 | 125 | |
cvmanuel | 2:ca0eb23626c5 | 126 | |
cvmanuel | 2:ca0eb23626c5 | 127 | |
cvmanuel | 2:ca0eb23626c5 | 128 | |
cvmanuel | 2:ca0eb23626c5 | 129 | |
cvmanuel | 2:ca0eb23626c5 | 130 | |
cvmanuel | 2:ca0eb23626c5 | 131 | |
cvmanuel | 2:ca0eb23626c5 | 132 | |
WilliamMarshQMUL | 0:a1caba5c4e48 | 133 | Thread::wait(300); |
cvmanuel | 3:d3a5c64bbcf9 | 134 | //timer.stop(); |
cvmanuel | 2:ca0eb23626c5 | 135 | |
cvmanuel | 2:ca0eb23626c5 | 136 | pc.printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n\r", x, y, z); |
cvmanuel | 2:ca0eb23626c5 | 137 | |
WilliamMarshQMUL | 0:a1caba5c4e48 | 138 | } |
WilliamMarshQMUL | 0:a1caba5c4e48 | 139 | } |