initial version

Dependencies:   MMA8451Q

Fork of Accelerometer_example by William Marsh

Committer:
cvmanuel
Date:
Thu Feb 22 14:58:13 2018 +0000
Revision:
3:d3a5c64bbcf9
Parent:
2:ca0eb23626c5
changes;

Who changed what in which revision?

UserRevisionLine numberNew 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 }