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

Committer:
vicara
Date:
Wed Nov 14 16:31:32 2018 +0000
Revision:
1:8681eb2b971d
Parent:
0:56acdbca3ea1
Child:
2:527f86cab491
Added blinking

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vicara 0:56acdbca3ea1 1 #include "mbed.h"
vicara 0:56acdbca3ea1 2
vicara 0:56acdbca3ea1 3 #include "stm32l475e_iot01_accelero.h"
vicara 0:56acdbca3ea1 4
vicara 0:56acdbca3ea1 5 DigitalOut led1(LED1);
vicara 0:56acdbca3ea1 6 DigitalOut led2(LED2);
vicara 0:56acdbca3ea1 7 DigitalOut led3(LED3);
vicara 0:56acdbca3ea1 8
vicara 0:56acdbca3ea1 9 InterruptIn button(USER_BUTTON);
vicara 0:56acdbca3ea1 10 int16_t pDataXYZ[3] = {0};
vicara 0:56acdbca3ea1 11
vicara 0:56acdbca3ea1 12 void toggle() {
vicara 0:56acdbca3ea1 13 printf("ACCELERO_X = %d\n", pDataXYZ[0]);
vicara 0:56acdbca3ea1 14 printf("ACCELERO_Y = %d\n", pDataXYZ[1]);
vicara 0:56acdbca3ea1 15 printf("ACCELERO_Z = %d\n\n", pDataXYZ[2]);
vicara 0:56acdbca3ea1 16 }
vicara 0:56acdbca3ea1 17
vicara 0:56acdbca3ea1 18 bool is_board_horizontal() {
vicara 0:56acdbca3ea1 19 bool is_X_inRange = false;
vicara 0:56acdbca3ea1 20 bool is_Y_inRange = false;
vicara 0:56acdbca3ea1 21 bool is_Z_inRange = false;
vicara 0:56acdbca3ea1 22
vicara 0:56acdbca3ea1 23 int x_value = pDataXYZ[0];
vicara 0:56acdbca3ea1 24 int y_value = pDataXYZ[1];
vicara 0:56acdbca3ea1 25 int z_value = pDataXYZ[2];
vicara 0:56acdbca3ea1 26
vicara 0:56acdbca3ea1 27 if(x_value < 100 && x_value > -100){
vicara 0:56acdbca3ea1 28 is_X_inRange = true;
vicara 0:56acdbca3ea1 29 }
vicara 0:56acdbca3ea1 30
vicara 0:56acdbca3ea1 31 if(y_value < 100 && y_value > -100){
vicara 0:56acdbca3ea1 32 is_Y_inRange = true;
vicara 0:56acdbca3ea1 33 }
vicara 0:56acdbca3ea1 34
vicara 0:56acdbca3ea1 35 if((z_value < 1030 && z_value > 950) || (z_value < -950 && z_value > -1030)){
vicara 0:56acdbca3ea1 36 is_Z_inRange = true;
vicara 0:56acdbca3ea1 37 }
vicara 0:56acdbca3ea1 38
vicara 0:56acdbca3ea1 39 return is_X_inRange && is_Y_inRange && is_Z_inRange;
vicara 0:56acdbca3ea1 40 }
vicara 0:56acdbca3ea1 41
vicara 0:56acdbca3ea1 42 bool is_board_vertical_short() {
vicara 0:56acdbca3ea1 43 bool is_X_inRange = false;
vicara 0:56acdbca3ea1 44 bool is_Y_inRange = false;
vicara 0:56acdbca3ea1 45 bool is_Z_inRange = false;
vicara 0:56acdbca3ea1 46
vicara 0:56acdbca3ea1 47 int x_value = pDataXYZ[0];
vicara 0:56acdbca3ea1 48 int y_value = pDataXYZ[1];
vicara 0:56acdbca3ea1 49 int z_value = pDataXYZ[2];
vicara 0:56acdbca3ea1 50
vicara 0:56acdbca3ea1 51 if((x_value < -950 && x_value > -1030) || (x_value < 1030 && x_value > 950)){
vicara 0:56acdbca3ea1 52 is_X_inRange = true;
vicara 0:56acdbca3ea1 53 }
vicara 0:56acdbca3ea1 54
vicara 0:56acdbca3ea1 55 if(y_value < 100 && y_value > -100){
vicara 0:56acdbca3ea1 56 is_Y_inRange = true;
vicara 0:56acdbca3ea1 57 }
vicara 0:56acdbca3ea1 58
vicara 0:56acdbca3ea1 59 if(z_value < 100 && z_value > -100){
vicara 0:56acdbca3ea1 60 is_Z_inRange = true;
vicara 0:56acdbca3ea1 61 }
vicara 0:56acdbca3ea1 62
vicara 0:56acdbca3ea1 63 return is_X_inRange && is_Y_inRange && is_Z_inRange;
vicara 0:56acdbca3ea1 64 }
vicara 0:56acdbca3ea1 65
vicara 0:56acdbca3ea1 66 bool is_board_vertical_long() {
vicara 0:56acdbca3ea1 67 bool is_X_inRange = false;
vicara 0:56acdbca3ea1 68 bool is_Y_inRange = false;
vicara 0:56acdbca3ea1 69 bool is_Z_inRange = false;
vicara 0:56acdbca3ea1 70
vicara 0:56acdbca3ea1 71 int x_value = pDataXYZ[0];
vicara 0:56acdbca3ea1 72 int y_value = pDataXYZ[1];
vicara 0:56acdbca3ea1 73 int z_value = pDataXYZ[2];
vicara 0:56acdbca3ea1 74
vicara 0:56acdbca3ea1 75 if(x_value < 100 && x_value > -100){
vicara 0:56acdbca3ea1 76 is_X_inRange = true;
vicara 0:56acdbca3ea1 77 }
vicara 0:56acdbca3ea1 78
vicara 0:56acdbca3ea1 79 if((y_value < 1030 && y_value > 950) || (y_value < -950 && y_value > -1030)){
vicara 0:56acdbca3ea1 80 is_Y_inRange = true;
vicara 0:56acdbca3ea1 81 }
vicara 0:56acdbca3ea1 82
vicara 0:56acdbca3ea1 83 if(z_value < 100 && z_value > -100){
vicara 0:56acdbca3ea1 84 is_Z_inRange = true;
vicara 0:56acdbca3ea1 85 }
vicara 0:56acdbca3ea1 86
vicara 0:56acdbca3ea1 87 return is_X_inRange && is_Y_inRange && is_Z_inRange;
vicara 0:56acdbca3ea1 88 }
vicara 0:56acdbca3ea1 89
vicara 1:8681eb2b971d 90 void blink_led(int led1_status, int led2_status, int led3_status, DigitalOut led){
vicara 1:8681eb2b971d 91 printf("%d - %d - %d\n", led1_status, led2_status, led3_status);
vicara 1:8681eb2b971d 92 led1 = led1_status;
vicara 1:8681eb2b971d 93 led2 = led2_status;
vicara 1:8681eb2b971d 94 led3 = led3_status;
vicara 1:8681eb2b971d 95 wait(1);
vicara 1:8681eb2b971d 96 led = !led;
vicara 1:8681eb2b971d 97 }
vicara 1:8681eb2b971d 98
vicara 1:8681eb2b971d 99 void blink_all(){
vicara 1:8681eb2b971d 100 led1 = 1;
vicara 1:8681eb2b971d 101 led2 = 1;
vicara 1:8681eb2b971d 102 led3 = 1;
vicara 1:8681eb2b971d 103 wait(1);
vicara 1:8681eb2b971d 104 led1 = 0;
vicara 1:8681eb2b971d 105 led2 = 0;
vicara 1:8681eb2b971d 106 led3 = 0;
vicara 1:8681eb2b971d 107 }
vicara 1:8681eb2b971d 108
vicara 0:56acdbca3ea1 109 int main(){
vicara 0:56acdbca3ea1 110 button.rise(&toggle);
vicara 0:56acdbca3ea1 111 BSP_ACCELERO_Init();
vicara 0:56acdbca3ea1 112 while(true){
vicara 0:56acdbca3ea1 113 BSP_ACCELERO_AccGetXYZ(pDataXYZ);
vicara 0:56acdbca3ea1 114 if((!is_board_vertical_long() && !is_board_vertical_short() && !is_board_horizontal())){
vicara 1:8681eb2b971d 115 blink_all();
vicara 0:56acdbca3ea1 116 } else {
vicara 0:56acdbca3ea1 117 if(is_board_horizontal() && !is_board_vertical_short() && !is_board_vertical_long()){
vicara 1:8681eb2b971d 118 blink_led(1,0,0, led1);
vicara 1:8681eb2b971d 119 } else if(!is_board_horizontal() && is_board_vertical_short() && !is_board_vertical_long()){
vicara 1:8681eb2b971d 120 blink_led(0,1,0, led2);
vicara 1:8681eb2b971d 121 } else if(!is_board_horizontal() && !is_board_vertical_short() && is_board_vertical_long()){
vicara 1:8681eb2b971d 122 blink_led(0,0,1, led3);
vicara 0:56acdbca3ea1 123 }
vicara 0:56acdbca3ea1 124 }
vicara 1:8681eb2b971d 125 wait(1);
vicara 0:56acdbca3ea1 126 }
vicara 0:56acdbca3ea1 127 }