Dependencies:   MMA8451Q

Revision:
4:fccebe805302
Parent:
3:d5c746840139
--- a/main.cpp	Wed Jan 30 21:54:03 2019 +0000
+++ b/main.cpp	Thu Feb 21 17:48:42 2019 +0000
@@ -6,6 +6,8 @@
 
 #define MMA8451_I2C_ADDRESS (0x1d<<1)
 
+enum orientation {Intermediate,FlatUp,FlatDown,Left,Right,Forwards,Backwards};
+
 int main(void)
 {
     MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
@@ -13,8 +15,9 @@
     PwmOut gled(LED2);
     PwmOut bled(LED3);
     Serial pc(USBTX, USBRX); // tx, rx
-
-
+    
+    orientation orient = Intermediate;
+    
     pc.printf("MMA8451 ID: %d\n", acc.getWhoAmI());
 
     while (true) {
@@ -22,10 +25,98 @@
         x = acc.getAccX();
         y = acc.getAccY();
         z = acc.getAccZ();
-        rled = 1.0f - abs(x);
-        gled = 1.0f - abs(y);
-        bled = 1.0f - abs(z);
-        wait(0.3);
-        pc.printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x, y, z);
+        //pc.printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x, y, z);
+        
+        switch (orient){
+            case Intermediate:
+                if(0.9<z && z<1.1){
+                    pc.printf("The TouchPad is flat\r\n");
+                    orient = FlatUp;
+                }
+                else if(-0.9>z && z>-1.1){
+                    pc.printf("The TouchPad is facing the floor\r\n");
+                    orient = FlatDown;
+                }
+                else if(0.9<y && y<1.1){
+                    pc.printf("The TouchPad is tipped to the right\r\n");
+                    orient = Right;
+                }
+                else if(-0.9>y && y>-1.1){
+                    pc.printf("The TouchPad is tipped to the left\r\n");
+                    orient = Left;
+                }
+                else if(0.9<x && x<1.1){
+                    pc.printf("The TouchPad is tipped forwards\r\n");
+                    orient = Forwards;
+                }
+                else if(-0.9>x && x>-1.1){
+                    pc.printf("The TouchPad is tipped backwards\r\n");
+                    orient = Backwards;
+                }   
+                break ;
+            case FlatUp:
+                if(0.9<z && z<1.1){
+                    rled = 1.0f - abs(z);
+                    gled = 1.0f - abs(y);
+                    bled = 1.0f - abs(x);
+                }
+                else{
+                    orient = Intermediate;
+                }
+                break;    
+            case FlatDown:
+                if(-0.9>z && z>-1.1){
+                    rled = 1.0f - abs(z);
+                    gled = 1.0f - abs(y);
+                    bled = 1.0f - abs(x);
+                }
+                else{
+                    orient = Intermediate;
+                }
+                break;    
+            case Forwards:
+                if(0.9<x && x<1.1){
+                    rled = 1.0f - abs(z);
+                    gled = 1.0f - abs(y);
+                    bled = 1.0f - abs(x);
+                }
+                else{
+                    orient = Intermediate;
+                } 
+                break;    
+            case Backwards:
+                if(-0.9<x && x<-1.1){
+                    rled = 1.0f - abs(z);
+                    gled = 1.0f - abs(y);
+                    bled = 1.0f - abs(x);
+                }
+                else{
+                    orient = Intermediate;
+                }
+                break;
+            case Right:
+                if(0.9<y && y<1.1){
+                    rled = 1.0f - abs(z);
+                    gled = 1.0f - abs(y);
+                    bled = 1.0f - abs(x);
+                }
+                else{
+                    orient = Intermediate;
+                }
+                break;
+            case Left:
+                if(-0.9<y && y<-1.1){
+                    rled = 1.0f - abs(z);
+                    gled = 1.0f - abs(y);
+                    bled = 1.0f - abs(x);
+                }
+                else{
+                    orient = Intermediate;
+                } 
+                break;
+        }    
+        
+        
+        wait(0.1);
     }
 }