Haozun Sun / Mbed OS Accelerometer1_hzsun

Files at this revision

API Documentation at this revision

Comitter:
hzsun
Date:
Fri Mar 06 02:11:38 2020 +0000
Parent:
5:392ac6e02d80
Commit message:
acc_1

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 392ac6e02d80 -r ef417da84ac5 main.cpp
--- a/main.cpp	Thu Feb 27 10:07:17 2020 +0000
+++ b/main.cpp	Fri Mar 06 02:11:38 2020 +0000
@@ -3,29 +3,115 @@
 
   PinName const SDA = PTE25;
   PinName const SCL = PTE24;
+  
 
 #define MMA8451_I2C_ADDRESS (0x1d<<1)
-
 int main(void)
 {
     MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
-    PwmOut rled(LED1);
-    PwmOut gled(LED2);
-    PwmOut bled(LED3);
+    DigitalOut rled(LED1);    //set red led 
+    DigitalOut gled(LED2);    //set green led 
+    DigitalOut bled(LED3);    //set blue led 
     Serial pc(USBTX, USBRX); // tx, rx
 
 
     pc.printf("MMA8451 ID: %d\n", acc.getWhoAmI());
+    enum accPos {intermediate, flat,over,right,left,up,down };     // the acc positions
+    accPos pos = intermediate ;     //the beginning state
 
     while (true) {
         float x, y, z;
-        x = acc.getAccX();
-        y = acc.getAccY();
-        z = acc.getAccZ();
-        rled = 1.0f - abs(x);
-        gled = 1.0f - abs(y);
-        bled = 1.0f - abs(z);
+        x = acc.getAccX();   // get value for x axis
+        y = acc.getAccY();   // get value for y axis
+        z = acc.getAccZ();   // get value for z axis
+        switch(pos) {
+
+            case intermediate :  //intermediate stae, get all led off
+                rled=1;
+                gled=1;
+                bled=1;
+
+                if(z>0.9) {      //when z >0.9 go to flat pos
+                    bled=0;
+                    pos=flat;
+                    pc.printf("flat\n");
+                }
+                if(z<-0.9) {    //when z <-0.9 go to over pos
+                    bled=0;
+                    pos=over;
+                    pc.printf("over\n");
+                }
+
+                if(y<-0.9) {     //when y <-0.9 go to left pos
+                    gled=0 ;
+                    pos=left;
+                    pc.printf("left\n");
+                }
+
+                if (y>0.9) {     //when y >0.9 go to right pos
+                    gled=0;
+                    pos=right;
+                    pc.printf("right\n");
+                }
+
+                if(x>0.9) {     //when x>0.9 go to up pos
+                    rled=0;
+                    pos=up;
+                    pc.printf("up\n");
+                }
+
+                if(x<-0.9) {     //when x<-0.9 go to down pos
+                    rled=0;
+                    pos=down;
+                    pc.printf("down\n");
+                }
+
+                break;
+
+            case flat:          //when z<0.8 go bact to intermediate pos
+                if(z<0.8) {       
+                    bled=1;
+                    pos=intermediate;
+                }
+                break;
+
+            case over:          //when z>-0.8 go bact to intermediate pos
+                if(z>-0.8) {
+                    bled=1;
+                    pos=intermediate;
+                }
+                break;
+
+            case left:          //when y>-0.8 go bact to intermediate pos
+                if(y>-0.8) {
+                    gled=1;
+                    pos=intermediate;
+                }
+                break;
+
+            case right:       //when y<0.8 go bact to intermediate pos
+                if(y<0.8) {
+                    gled=1;
+                    pos=intermediate;
+                }
+                break;
+
+            case up:           //when x<0.8 go bact to intermediate pos
+                if(x<0.8) {
+                    rled=1;
+                    pos=intermediate;
+                }
+                break;
+
+            case down:    //when x>-0.8 go bact to intermediate pos
+                if(x>-0.8) {
+                    rled=1;
+                    pos=intermediate;
+                }
+                break;
+        }
+
         ThisThread::sleep_for(300);  // wait(0.3);
-        pc.printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x, y, z);
+
     }
 }