Code sensor IR

Dependencies:   BSP_DISCO_F746NG

Committer:
stephane_m
Date:
Thu Jun 25 16:51:20 2020 +0000
Revision:
0:8c1b74ecac29
Code capteur IR

Who changed what in which revision?

UserRevisionLine numberNew 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 }