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@1:8681eb2b971d, 2018-11-14 (annotated)
- 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?
User | Revision | Line number | New 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 | } |