Sebastian Barrera / Mbed OS Lab4_part1

Dependencies:   MMA8451Q1

Committer:
sebbarpar
Date:
Thu Mar 05 11:04:02 2020 +0000
Revision:
5:f4d8d65ab7d5
Parent:
4:72b8fb7423dd
Child:
6:a76dc8c92cea
Lab4 Part1;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WilliamMarshQMUL 0:a1caba5c4e48 1 #include "mbed.h"
WilliamMarshQMUL 0:a1caba5c4e48 2 #include "MMA8451Q.h"
WilliamMarshQMUL 0:a1caba5c4e48 3
WilliamMarshQMUL 0:a1caba5c4e48 4 PinName const SDA = PTE25;
WilliamMarshQMUL 0:a1caba5c4e48 5 PinName const SCL = PTE24;
WilliamMarshQMUL 0:a1caba5c4e48 6
WilliamMarshQMUL 0:a1caba5c4e48 7 #define MMA8451_I2C_ADDRESS (0x1d<<1)
sebbarpar 5:f4d8d65ab7d5 8 enum state { intermediate, flat, over, down, up, left, right};
WilliamMarshQMUL 0:a1caba5c4e48 9 int main(void)
WilliamMarshQMUL 0:a1caba5c4e48 10 {
WilliamMarshQMUL 0:a1caba5c4e48 11 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
sebbarpar 5:f4d8d65ab7d5 12 DigitalOut rled(LED1,1);
sebbarpar 5:f4d8d65ab7d5 13 DigitalOut gled(LED2,1);
sebbarpar 5:f4d8d65ab7d5 14 DigitalOut bled(LED3,1);
WilliamMarshQMUL 0:a1caba5c4e48 15 Serial pc(USBTX, USBRX); // tx, rx
sebbarpar 5:f4d8d65ab7d5 16 int state;
WilliamMarshQMUL 0:a1caba5c4e48 17
WilliamMarshQMUL 0:a1caba5c4e48 18 pc.printf("MMA8451 ID: %d\n", acc.getWhoAmI());
sebbarpar 5:f4d8d65ab7d5 19 state=intermediate;
WilliamMarshQMUL 0:a1caba5c4e48 20 while (true) {
WilliamMarshQMUL 0:a1caba5c4e48 21 float x, y, z;
sebbarpar 5:f4d8d65ab7d5 22
WilliamMarshQMUL 0:a1caba5c4e48 23 x = acc.getAccX();
WilliamMarshQMUL 0:a1caba5c4e48 24 y = acc.getAccY();
WilliamMarshQMUL 0:a1caba5c4e48 25 z = acc.getAccZ();
sebbarpar 5:f4d8d65ab7d5 26 switch (state){
sebbarpar 5:f4d8d65ab7d5 27 case intermediate:
sebbarpar 5:f4d8d65ab7d5 28 rled=1;
sebbarpar 5:f4d8d65ab7d5 29 gled=1;
sebbarpar 5:f4d8d65ab7d5 30 bled=1;
sebbarpar 5:f4d8d65ab7d5 31 if (z>0.9) {state=flat; pc.printf("Flat");}
sebbarpar 5:f4d8d65ab7d5 32 if (z<-0.9) {state=over; pc.printf("Over");}
sebbarpar 5:f4d8d65ab7d5 33 if (x>0.9) {state=down; pc.printf("Down");}
sebbarpar 5:f4d8d65ab7d5 34 if (x<-0.9) {state=up; pc.printf("Up");}
sebbarpar 5:f4d8d65ab7d5 35 if (y>0.9) {state=left; pc.printf("Left");}
sebbarpar 5:f4d8d65ab7d5 36 if (y<-0.9) {state=right; pc.printf("Right");}
sebbarpar 5:f4d8d65ab7d5 37 break;
sebbarpar 5:f4d8d65ab7d5 38
sebbarpar 5:f4d8d65ab7d5 39 case flat:
sebbarpar 5:f4d8d65ab7d5 40 rled=0;
sebbarpar 5:f4d8d65ab7d5 41 if (z<0.8) state=intermediate;
sebbarpar 5:f4d8d65ab7d5 42 break;
sebbarpar 5:f4d8d65ab7d5 43
sebbarpar 5:f4d8d65ab7d5 44 case over:
sebbarpar 5:f4d8d65ab7d5 45 gled=0;
sebbarpar 5:f4d8d65ab7d5 46 if (z>-0.8) state=intermediate;
sebbarpar 5:f4d8d65ab7d5 47 break;
sebbarpar 5:f4d8d65ab7d5 48
sebbarpar 5:f4d8d65ab7d5 49 case down:
sebbarpar 5:f4d8d65ab7d5 50 bled=0;
sebbarpar 5:f4d8d65ab7d5 51 if (x<0.8) state=intermediate;
sebbarpar 5:f4d8d65ab7d5 52 break;
sebbarpar 5:f4d8d65ab7d5 53
sebbarpar 5:f4d8d65ab7d5 54 case up:
sebbarpar 5:f4d8d65ab7d5 55 rled=0;
sebbarpar 5:f4d8d65ab7d5 56 gled=0;
sebbarpar 5:f4d8d65ab7d5 57 if (x>-0.8) state=intermediate;
sebbarpar 5:f4d8d65ab7d5 58 break;
sebbarpar 5:f4d8d65ab7d5 59
sebbarpar 5:f4d8d65ab7d5 60 case left:
sebbarpar 5:f4d8d65ab7d5 61 gled=0;
sebbarpar 5:f4d8d65ab7d5 62 bled=0;
sebbarpar 5:f4d8d65ab7d5 63 if (y<0.8) state=intermediate;
sebbarpar 5:f4d8d65ab7d5 64 break;
sebbarpar 5:f4d8d65ab7d5 65
sebbarpar 5:f4d8d65ab7d5 66 case right:
sebbarpar 5:f4d8d65ab7d5 67 rled=0;
sebbarpar 5:f4d8d65ab7d5 68 bled=0;
sebbarpar 5:f4d8d65ab7d5 69 if (y>-0.8) state=intermediate;
sebbarpar 5:f4d8d65ab7d5 70 break;
sebbarpar 5:f4d8d65ab7d5 71 }
WilliamMarshQMUL 4:72b8fb7423dd 72 ThisThread::sleep_for(300); // wait(0.3);
WilliamMarshQMUL 0:a1caba5c4e48 73 pc.printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x, y, z);
sebbarpar 5:f4d8d65ab7d5 74
WilliamMarshQMUL 0:a1caba5c4e48 75 }
WilliamMarshQMUL 0:a1caba5c4e48 76 }