Write an Mbed application that blinks – LED1 when the board is horizontal – LED2 when the board is lying on the long edge – LED3 when the board is lying on the short edge – All LEDs when the board is in none of those positions

Dependencies:   BSP_B-L475E-IOT01 mbed

Revision:
0:56acdbca3ea1
Child:
1:8681eb2b971d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Nov 11 15:50:33 2018 +0000
@@ -0,0 +1,126 @@
+#include "mbed.h"
+
+#include "stm32l475e_iot01_accelero.h"
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+
+
+InterruptIn button(USER_BUTTON);
+int16_t pDataXYZ[3] = {0};
+
+void toggle() {
+    printf("ACCELERO_X = %d\n", pDataXYZ[0]);
+    printf("ACCELERO_Y = %d\n", pDataXYZ[1]);
+    printf("ACCELERO_Z = %d\n\n", pDataXYZ[2]);
+}
+
+bool is_board_horizontal() {
+    bool is_X_inRange = false;
+    bool is_Y_inRange = false;
+    bool is_Z_inRange = false;
+    
+    int x_value = pDataXYZ[0];
+    int y_value = pDataXYZ[1];
+    int z_value = pDataXYZ[2];
+    
+    if(x_value < 100 && x_value > -100){
+        is_X_inRange = true;
+    }
+    
+    if(y_value < 100 && y_value > -100){
+        is_Y_inRange = true;
+    }
+    
+    if((z_value < 1030 && z_value > 950) || (z_value < -950 && z_value > -1030)){
+        is_Z_inRange = true;
+    }
+    
+    return is_X_inRange && is_Y_inRange && is_Z_inRange;
+}
+
+bool is_board_vertical_short() {
+    bool is_X_inRange = false;
+    bool is_Y_inRange = false;
+    bool is_Z_inRange = false;
+    
+    int x_value = pDataXYZ[0];
+    int y_value = pDataXYZ[1];
+    int z_value = pDataXYZ[2];
+    
+    if((x_value < -950  && x_value > -1030) || (x_value < 1030 && x_value > 950)){
+        is_X_inRange = true;
+    }
+    
+    if(y_value < 100 && y_value > -100){
+        is_Y_inRange = true;
+    }
+    
+    if(z_value < 100 && z_value > -100){
+        is_Z_inRange = true;
+    }
+    
+    return is_X_inRange && is_Y_inRange && is_Z_inRange;
+}
+
+bool is_board_vertical_long() {
+    bool is_X_inRange = false;
+    bool is_Y_inRange = false;
+    bool is_Z_inRange = false;
+    
+    int x_value = pDataXYZ[0];
+    int y_value = pDataXYZ[1];
+    int z_value = pDataXYZ[2];
+    
+    if(x_value < 100  && x_value > -100){
+        is_X_inRange = true;
+    }
+    
+    if((y_value < 1030 && y_value > 950) || (y_value < -950 && y_value > -1030)){
+        is_Y_inRange = true;
+    }
+    
+    if(z_value < 100 && z_value > -100){
+        is_Z_inRange = true;
+    }
+    
+    return is_X_inRange && is_Y_inRange && is_Z_inRange;
+}
+
+int main(){
+    button.rise(&toggle);
+    BSP_ACCELERO_Init();
+    
+    while(true){
+        BSP_ACCELERO_AccGetXYZ(pDataXYZ);
+        
+        if((!is_board_vertical_long() && !is_board_vertical_short() && !is_board_horizontal())){
+//            printf("NONE\n");
+            led1 = 1;
+            led2 = 1;
+            led3 = 1;
+        } else {
+            if(is_board_horizontal() && !is_board_vertical_short() && !is_board_vertical_long()){
+//            printf("Horizontal\n");
+                led1 = 1;
+            } else {
+                led1 = 0;
+            }
+            
+            if(!is_board_horizontal() && is_board_vertical_short() && !is_board_vertical_long()){
+//                printf("Vertical short\n");
+                led2 = 1;
+            } else {
+                led2 = 0;
+            }
+            
+            if(!is_board_horizontal() && !is_board_vertical_short() && is_board_vertical_long()){
+//                printf("Vertical long\n");
+                led3 = 1;
+            } else {
+                led3 = 0;
+            }
+        }
+    }
+}
\ No newline at end of file