
Code sensor IR
Dependencies: BSP_DISCO_F746NG
main.cpp@0:8c1b74ecac29, 2020-06-25 (annotated)
- Committer:
- stephane_m
- Date:
- Thu Jun 25 16:51:20 2020 +0000
- Revision:
- 0:8c1b74ecac29
Code capteur IR
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
stephane_m | 0:8c1b74ecac29 | 1 | #include "mbed.h" |
stephane_m | 0:8c1b74ecac29 | 2 | #include "button.h" |
stephane_m | 0:8c1b74ecac29 | 3 | #include "view.h" |
stephane_m | 0:8c1b74ecac29 | 4 | #include "stm32746g_discovery_lcd.h" |
stephane_m | 0:8c1b74ecac29 | 5 | #include "stm32746g_discovery_ts.h" |
stephane_m | 0:8c1b74ecac29 | 6 | #include <list> |
stephane_m | 0:8c1b74ecac29 | 7 | #define SCREENWIDTH 480 |
stephane_m | 0:8c1b74ecac29 | 8 | #define SCREENHEIGHT 272 |
stephane_m | 0:8c1b74ecac29 | 9 | |
stephane_m | 0:8c1b74ecac29 | 10 | uint8_t text[30]; |
stephane_m | 0:8c1b74ecac29 | 11 | AnalogIn capteur (A0); |
stephane_m | 0:8c1b74ecac29 | 12 | |
stephane_m | 0:8c1b74ecac29 | 13 | void setBackgroundColor(uint32_t color) |
stephane_m | 0:8c1b74ecac29 | 14 | { |
stephane_m | 0:8c1b74ecac29 | 15 | BSP_LCD_Clear(color); |
stephane_m | 0:8c1b74ecac29 | 16 | } |
stephane_m | 0:8c1b74ecac29 | 17 | |
stephane_m | 0:8c1b74ecac29 | 18 | void setHalfColor(uint32_t color0, uint32_t color1) |
stephane_m | 0:8c1b74ecac29 | 19 | { |
stephane_m | 0:8c1b74ecac29 | 20 | BSP_LCD_Clear(color0); |
stephane_m | 0:8c1b74ecac29 | 21 | |
stephane_m | 0:8c1b74ecac29 | 22 | int x = SCREENWIDTH>>1; |
stephane_m | 0:8c1b74ecac29 | 23 | while (x < SCREENWIDTH) { |
stephane_m | 0:8c1b74ecac29 | 24 | int y = 0; |
stephane_m | 0:8c1b74ecac29 | 25 | while (y < SCREENHEIGHT) { |
stephane_m | 0:8c1b74ecac29 | 26 | BSP_LCD_DrawPixel(x, y, color1); |
stephane_m | 0:8c1b74ecac29 | 27 | y++; |
stephane_m | 0:8c1b74ecac29 | 28 | } |
stephane_m | 0:8c1b74ecac29 | 29 | x++; |
stephane_m | 0:8c1b74ecac29 | 30 | } |
stephane_m | 0:8c1b74ecac29 | 31 | } |
stephane_m | 0:8c1b74ecac29 | 32 | |
stephane_m | 0:8c1b74ecac29 | 33 | void updateButton() |
stephane_m | 0:8c1b74ecac29 | 34 | { |
stephane_m | 0:8c1b74ecac29 | 35 | |
stephane_m | 0:8c1b74ecac29 | 36 | |
stephane_m | 0:8c1b74ecac29 | 37 | } |
stephane_m | 0:8c1b74ecac29 | 38 | void drawButton(uint32_t color0, int posX, int posY, int width, int height) |
stephane_m | 0:8c1b74ecac29 | 39 | { |
stephane_m | 0:8c1b74ecac29 | 40 | } |
stephane_m | 0:8c1b74ecac29 | 41 | |
stephane_m | 0:8c1b74ecac29 | 42 | |
stephane_m | 0:8c1b74ecac29 | 43 | |
stephane_m | 0:8c1b74ecac29 | 44 | int main() |
stephane_m | 0:8c1b74ecac29 | 45 | { |
stephane_m | 0:8c1b74ecac29 | 46 | TS_StateTypeDef TS_State; |
stephane_m | 0:8c1b74ecac29 | 47 | uint16_t x, y; |
stephane_m | 0:8c1b74ecac29 | 48 | uint8_t status; |
stephane_m | 0:8c1b74ecac29 | 49 | uint8_t idx; |
stephane_m | 0:8c1b74ecac29 | 50 | uint8_t cleared = 0; |
stephane_m | 0:8c1b74ecac29 | 51 | uint8_t prev_nb_touches = 0; |
stephane_m | 0:8c1b74ecac29 | 52 | int etat = 0; |
stephane_m | 0:8c1b74ecac29 | 53 | int i = 0; |
stephane_m | 0:8c1b74ecac29 | 54 | |
stephane_m | 0:8c1b74ecac29 | 55 | BSP_LCD_Init(); |
stephane_m | 0:8c1b74ecac29 | 56 | BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS); |
stephane_m | 0:8c1b74ecac29 | 57 | BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER); |
stephane_m | 0:8c1b74ecac29 | 58 | |
stephane_m | 0:8c1b74ecac29 | 59 | status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); |
stephane_m | 0:8c1b74ecac29 | 60 | if (status != TS_OK) { |
stephane_m | 0:8c1b74ecac29 | 61 | BSP_LCD_Clear(LCD_COLOR_RED); |
stephane_m | 0:8c1b74ecac29 | 62 | BSP_LCD_SetBackColor(LCD_COLOR_RED); |
stephane_m | 0:8c1b74ecac29 | 63 | BSP_LCD_SetTextColor(LCD_COLOR_WHITE); |
stephane_m | 0:8c1b74ecac29 | 64 | BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE); |
stephane_m | 0:8c1b74ecac29 | 65 | while (1); |
stephane_m | 0:8c1b74ecac29 | 66 | } else { |
stephane_m | 0:8c1b74ecac29 | 67 | BSP_LCD_Clear(LCD_COLOR_GREEN); |
stephane_m | 0:8c1b74ecac29 | 68 | BSP_LCD_SetBackColor(LCD_COLOR_GREEN); |
stephane_m | 0:8c1b74ecac29 | 69 | BSP_LCD_SetTextColor(LCD_COLOR_WHITE); |
stephane_m | 0:8c1b74ecac29 | 70 | BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE); |
stephane_m | 0:8c1b74ecac29 | 71 | } |
stephane_m | 0:8c1b74ecac29 | 72 | |
stephane_m | 0:8c1b74ecac29 | 73 | HAL_Delay(100); |
stephane_m | 0:8c1b74ecac29 | 74 | BSP_LCD_SetFont(&Font12); |
stephane_m | 0:8c1b74ecac29 | 75 | BSP_LCD_SetBackColor(LCD_COLOR_LIGHTCYAN); |
stephane_m | 0:8c1b74ecac29 | 76 | BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE); |
stephane_m | 0:8c1b74ecac29 | 77 | View v; |
stephane_m | 0:8c1b74ecac29 | 78 | v.i=&i; |
stephane_m | 0:8c1b74ecac29 | 79 | |
stephane_m | 0:8c1b74ecac29 | 80 | Timer timer; |
stephane_m | 0:8c1b74ecac29 | 81 | timer.start(); |
stephane_m | 0:8c1b74ecac29 | 82 | |
stephane_m | 0:8c1b74ecac29 | 83 | while(1) { |
stephane_m | 0:8c1b74ecac29 | 84 | v.drawImage(0, 0); |
stephane_m | 0:8c1b74ecac29 | 85 | float valeur = capteur.read(); |
stephane_m | 0:8c1b74ecac29 | 86 | BSP_LCD_SetFont(&Font24); |
stephane_m | 0:8c1b74ecac29 | 87 | //sprintf((char*)text, "valeur: %5.3f", valeur); |
stephane_m | 0:8c1b74ecac29 | 88 | //BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)&text, LEFT_MODE); |
stephane_m | 0:8c1b74ecac29 | 89 | |
stephane_m | 0:8c1b74ecac29 | 90 | |
stephane_m | 0:8c1b74ecac29 | 91 | sprintf((char*)text, "Nombre de personne: %d", i); |
stephane_m | 0:8c1b74ecac29 | 92 | BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, LEFT_MODE); |
stephane_m | 0:8c1b74ecac29 | 93 | |
stephane_m | 0:8c1b74ecac29 | 94 | |
stephane_m | 0:8c1b74ecac29 | 95 | //sprintf((char*)text, "etat: %d", etat); |
stephane_m | 0:8c1b74ecac29 | 96 | //BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, LEFT_MODE); |
stephane_m | 0:8c1b74ecac29 | 97 | switch (etat) { |
stephane_m | 0:8c1b74ecac29 | 98 | case 0 : |
stephane_m | 0:8c1b74ecac29 | 99 | // il n'y a personne |
stephane_m | 0:8c1b74ecac29 | 100 | if (valeur > 0.68) { |
stephane_m | 0:8c1b74ecac29 | 101 | etat = 1; |
stephane_m | 0:8c1b74ecac29 | 102 | i++; |
stephane_m | 0:8c1b74ecac29 | 103 | timer.reset(); |
stephane_m | 0:8c1b74ecac29 | 104 | } |
stephane_m | 0:8c1b74ecac29 | 105 | break; |
stephane_m | 0:8c1b74ecac29 | 106 | case 1: |
stephane_m | 0:8c1b74ecac29 | 107 | if (timer.read()>1) { |
stephane_m | 0:8c1b74ecac29 | 108 | etat=2; |
stephane_m | 0:8c1b74ecac29 | 109 | } |
stephane_m | 0:8c1b74ecac29 | 110 | break; |
stephane_m | 0:8c1b74ecac29 | 111 | case 2 : |
stephane_m | 0:8c1b74ecac29 | 112 | // il y a quelqu'un |
stephane_m | 0:8c1b74ecac29 | 113 | if (valeur <0.4) { |
stephane_m | 0:8c1b74ecac29 | 114 | // la personne est passée : il faut incrémenter |
stephane_m | 0:8c1b74ecac29 | 115 | etat = 0; |
stephane_m | 0:8c1b74ecac29 | 116 | timer.reset(); |
stephane_m | 0:8c1b74ecac29 | 117 | } |
stephane_m | 0:8c1b74ecac29 | 118 | break; |
stephane_m | 0:8c1b74ecac29 | 119 | |
stephane_m | 0:8c1b74ecac29 | 120 | default : |
stephane_m | 0:8c1b74ecac29 | 121 | // ce cas ne devrait jamais se produire |
stephane_m | 0:8c1b74ecac29 | 122 | etat = 0; |
stephane_m | 0:8c1b74ecac29 | 123 | } // fin du switch |
stephane_m | 0:8c1b74ecac29 | 124 | |
stephane_m | 0:8c1b74ecac29 | 125 | |
stephane_m | 0:8c1b74ecac29 | 126 | |
stephane_m | 0:8c1b74ecac29 | 127 | |
stephane_m | 0:8c1b74ecac29 | 128 | BSP_TS_GetState(&TS_State); |
stephane_m | 0:8c1b74ecac29 | 129 | if (TS_State.touchDetected) { |
stephane_m | 0:8c1b74ecac29 | 130 | cleared = 0; |
stephane_m | 0:8c1b74ecac29 | 131 | /*sprintf((char*)text, "Touches: %d", TS_State.touchDetected); |
stephane_m | 0:8c1b74ecac29 | 132 | BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); |
stephane_m | 0:8c1b74ecac29 | 133 | */for (idx = 0; idx < TS_State.touchDetected; idx++) { |
stephane_m | 0:8c1b74ecac29 | 134 | x = TS_State.touchX[idx]; |
stephane_m | 0:8c1b74ecac29 | 135 | y = TS_State.touchY[idx]; |
stephane_m | 0:8c1b74ecac29 | 136 | v.contain(x, y); |
stephane_m | 0:8c1b74ecac29 | 137 | } |
stephane_m | 0:8c1b74ecac29 | 138 | |
stephane_m | 0:8c1b74ecac29 | 139 | |
stephane_m | 0:8c1b74ecac29 | 140 | } else { |
stephane_m | 0:8c1b74ecac29 | 141 | if (!cleared) { |
stephane_m | 0:8c1b74ecac29 | 142 | v.draw(); |
stephane_m | 0:8c1b74ecac29 | 143 | /*sprintf((char*)text, "Touches: 0"); |
stephane_m | 0:8c1b74ecac29 | 144 | BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); |
stephane_m | 0:8c1b74ecac29 | 145 | */cleared = 1; |
stephane_m | 0:8c1b74ecac29 | 146 | } |
stephane_m | 0:8c1b74ecac29 | 147 | } |
stephane_m | 0:8c1b74ecac29 | 148 | } |
stephane_m | 0:8c1b74ecac29 | 149 | } |