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
main.cpp
- Committer:
- vicara
- Date:
- 2018-11-14
- Revision:
- 1:8681eb2b971d
- Parent:
- 0:56acdbca3ea1
- Child:
- 2:527f86cab491
File content as of revision 1:8681eb2b971d:
#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; } void blink_led(int led1_status, int led2_status, int led3_status, DigitalOut led){ printf("%d - %d - %d\n", led1_status, led2_status, led3_status); led1 = led1_status; led2 = led2_status; led3 = led3_status; wait(1); led = !led; } void blink_all(){ led1 = 1; led2 = 1; led3 = 1; wait(1); led1 = 0; led2 = 0; led3 = 0; } 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())){ blink_all(); } else { if(is_board_horizontal() && !is_board_vertical_short() && !is_board_vertical_long()){ blink_led(1,0,0, led1); } else if(!is_board_horizontal() && is_board_vertical_short() && !is_board_vertical_long()){ blink_led(0,1,0, led2); } else if(!is_board_horizontal() && !is_board_vertical_short() && is_board_vertical_long()){ blink_led(0,0,1, led3); } } wait(1); } }