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:
Fri Nov 16 11:33:15 2018 +0000
Revision:
2:527f86cab491
Parent:
1:8681eb2b971d
refactor;

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 2:527f86cab491 19 return (pDataXYZ[2] < 1030 && pDataXYZ[2] > 950) || (pDataXYZ[2] < -950 && pDataXYZ[2] > -1030);
vicara 0:56acdbca3ea1 20 }
vicara 0:56acdbca3ea1 21
vicara 0:56acdbca3ea1 22 bool is_board_vertical_short() {
vicara 2:527f86cab491 23 return (pDataXYZ[0] < -950 && pDataXYZ[0] > -1030) || (pDataXYZ[0] < 1030 && pDataXYZ[0] > 950);
vicara 0:56acdbca3ea1 24 }
vicara 0:56acdbca3ea1 25
vicara 0:56acdbca3ea1 26 bool is_board_vertical_long() {
vicara 2:527f86cab491 27 return (pDataXYZ[1] < 1030 && pDataXYZ[1] > 950) || (pDataXYZ[1] < -950 && pDataXYZ[1] > -1030);
vicara 0:56acdbca3ea1 28 }
vicara 0:56acdbca3ea1 29
vicara 1:8681eb2b971d 30 void blink_led(int led1_status, int led2_status, int led3_status, DigitalOut led){
vicara 1:8681eb2b971d 31 printf("%d - %d - %d\n", led1_status, led2_status, led3_status);
vicara 1:8681eb2b971d 32 led1 = led1_status;
vicara 1:8681eb2b971d 33 led2 = led2_status;
vicara 1:8681eb2b971d 34 led3 = led3_status;
vicara 1:8681eb2b971d 35 wait(1);
vicara 1:8681eb2b971d 36 led = !led;
vicara 1:8681eb2b971d 37 }
vicara 1:8681eb2b971d 38
vicara 1:8681eb2b971d 39 void blink_all(){
vicara 1:8681eb2b971d 40 led1 = 1;
vicara 1:8681eb2b971d 41 led2 = 1;
vicara 1:8681eb2b971d 42 led3 = 1;
vicara 1:8681eb2b971d 43 wait(1);
vicara 1:8681eb2b971d 44 led1 = 0;
vicara 1:8681eb2b971d 45 led2 = 0;
vicara 1:8681eb2b971d 46 led3 = 0;
vicara 1:8681eb2b971d 47 }
vicara 1:8681eb2b971d 48
vicara 0:56acdbca3ea1 49 int main(){
vicara 0:56acdbca3ea1 50 button.rise(&toggle);
vicara 0:56acdbca3ea1 51 BSP_ACCELERO_Init();
vicara 0:56acdbca3ea1 52 while(true){
vicara 0:56acdbca3ea1 53 BSP_ACCELERO_AccGetXYZ(pDataXYZ);
vicara 0:56acdbca3ea1 54 if((!is_board_vertical_long() && !is_board_vertical_short() && !is_board_horizontal())){
vicara 1:8681eb2b971d 55 blink_all();
vicara 0:56acdbca3ea1 56 } else {
vicara 0:56acdbca3ea1 57 if(is_board_horizontal() && !is_board_vertical_short() && !is_board_vertical_long()){
vicara 1:8681eb2b971d 58 blink_led(1,0,0, led1);
vicara 1:8681eb2b971d 59 } else if(!is_board_horizontal() && is_board_vertical_short() && !is_board_vertical_long()){
vicara 1:8681eb2b971d 60 blink_led(0,1,0, led2);
vicara 1:8681eb2b971d 61 } else if(!is_board_horizontal() && !is_board_vertical_short() && is_board_vertical_long()){
vicara 1:8681eb2b971d 62 blink_led(0,0,1, led3);
vicara 0:56acdbca3ea1 63 }
vicara 0:56acdbca3ea1 64 }
vicara 1:8681eb2b971d 65 wait(1);
vicara 0:56acdbca3ea1 66 }
vicara 0:56acdbca3ea1 67 }