
Mesure le taux de CO2 avec le capteur Telaire T3320
Dependencies: BSP_DISCO_F746NG
main.cpp@0:c59276d46a12, 2021-06-22 (annotated)
- Committer:
- dragomir
- Date:
- Tue Jun 22 09:43:46 2021 +0000
- Revision:
- 0:c59276d46a12
Projet C02
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dragomir | 0:c59276d46a12 | 1 | #include "mbed.h" |
dragomir | 0:c59276d46a12 | 2 | #include "ft5336.h" |
dragomir | 0:c59276d46a12 | 3 | #include "stm32746g_discovery.h" |
dragomir | 0:c59276d46a12 | 4 | #include "stm32746g_discovery_lcd.h" |
dragomir | 0:c59276d46a12 | 5 | #include "stm32746g_discovery_ts.h" |
dragomir | 0:c59276d46a12 | 6 | #include "logo.h" |
dragomir | 0:c59276d46a12 | 7 | |
dragomir | 0:c59276d46a12 | 8 | void drawImage_logo(int offsetX, int offsetY) |
dragomir | 0:c59276d46a12 | 9 | { |
dragomir | 0:c59276d46a12 | 10 | int x = 0; |
dragomir | 0:c59276d46a12 | 11 | int y = 0; |
dragomir | 0:c59276d46a12 | 12 | uint32_t* dataPtr = (uint32_t*)logo.data; |
dragomir | 0:c59276d46a12 | 13 | while(y < logo.height) { |
dragomir | 0:c59276d46a12 | 14 | while(x < logo.width) { |
dragomir | 0:c59276d46a12 | 15 | BSP_LCD_DrawPixel(x + offsetX, y + offsetY, *dataPtr); |
dragomir | 0:c59276d46a12 | 16 | dataPtr++; |
dragomir | 0:c59276d46a12 | 17 | x++; |
dragomir | 0:c59276d46a12 | 18 | } |
dragomir | 0:c59276d46a12 | 19 | x = 0; |
dragomir | 0:c59276d46a12 | 20 | y++; |
dragomir | 0:c59276d46a12 | 21 | } |
dragomir | 0:c59276d46a12 | 22 | } |
dragomir | 0:c59276d46a12 | 23 | |
dragomir | 0:c59276d46a12 | 24 | TS_StateTypeDef State; |
dragomir | 0:c59276d46a12 | 25 | TS_TouchEventTypeDef event; |
dragomir | 0:c59276d46a12 | 26 | DigitalOut buzer(PG_6); |
dragomir | 0:c59276d46a12 | 27 | I2C i2c(PB_9,PB_8); // initialisation des broches I2C |
dragomir | 0:c59276d46a12 | 28 | |
dragomir | 0:c59276d46a12 | 29 | |
dragomir | 0:c59276d46a12 | 30 | |
dragomir | 0:c59276d46a12 | 31 | int main() |
dragomir | 0:c59276d46a12 | 32 | { |
dragomir | 0:c59276d46a12 | 33 | |
dragomir | 0:c59276d46a12 | 34 | char readdata[6] = {}; |
dragomir | 0:c59276d46a12 | 35 | char writedata[6] = {}; |
dragomir | 0:c59276d46a12 | 36 | int frequence = 100000; |
dragomir | 0:c59276d46a12 | 37 | int x = 0; |
dragomir | 0:c59276d46a12 | 38 | int y = 0; |
dragomir | 0:c59276d46a12 | 39 | int read = 0; |
dragomir | 0:c59276d46a12 | 40 | uint8_t adresse = 42; // adresse du capteur |
dragomir | 0:c59276d46a12 | 41 | uint8_t coorX = 100; |
dragomir | 0:c59276d46a12 | 42 | uint8_t coorY = 100; |
dragomir | 0:c59276d46a12 | 43 | char buf[20] = {0}; |
dragomir | 0:c59276d46a12 | 44 | char buf2[20] = {0}; |
dragomir | 0:c59276d46a12 | 45 | char buffer[10] = {}; |
dragomir | 0:c59276d46a12 | 46 | char bufvalue[10] = {}; |
dragomir | 0:c59276d46a12 | 47 | int MSB = 0; // most significant bit |
dragomir | 0:c59276d46a12 | 48 | int LSB = 0; // less signifiicant bit |
dragomir | 0:c59276d46a12 | 49 | int ppm = 0; |
dragomir | 0:c59276d46a12 | 50 | int etat = 1; |
dragomir | 0:c59276d46a12 | 51 | |
dragomir | 0:c59276d46a12 | 52 | BSP_LCD_Init(); // initialisation du LCD |
dragomir | 0:c59276d46a12 | 53 | BSP_TS_Init(BSP_LCD_GetXSize(),BSP_LCD_GetYSize()); // initialisation du touch screen |
dragomir | 0:c59276d46a12 | 54 | BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS); |
dragomir | 0:c59276d46a12 | 55 | BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER); |
dragomir | 0:c59276d46a12 | 56 | i2c.frequency(frequence); // frequence de communication imposee par le maître |
dragomir | 0:c59276d46a12 | 57 | |
dragomir | 0:c59276d46a12 | 58 | |
dragomir | 0:c59276d46a12 | 59 | int i = 0; |
dragomir | 0:c59276d46a12 | 60 | |
dragomir | 0:c59276d46a12 | 61 | |
dragomir | 0:c59276d46a12 | 62 | BSP_LCD_Clear(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 63 | |
dragomir | 0:c59276d46a12 | 64 | while (1) { |
dragomir | 0:c59276d46a12 | 65 | |
dragomir | 0:c59276d46a12 | 66 | |
dragomir | 0:c59276d46a12 | 67 | |
dragomir | 0:c59276d46a12 | 68 | switch(etat) |
dragomir | 0:c59276d46a12 | 69 | |
dragomir | 0:c59276d46a12 | 70 | { |
dragomir | 0:c59276d46a12 | 71 | |
dragomir | 0:c59276d46a12 | 72 | case 0 : |
dragomir | 0:c59276d46a12 | 73 | |
dragomir | 0:c59276d46a12 | 74 | writedata[0] = 0x04; |
dragomir | 0:c59276d46a12 | 75 | writedata[1] = 0x13; |
dragomir | 0:c59276d46a12 | 76 | writedata[2] = 0x8B; |
dragomir | 0:c59276d46a12 | 77 | writedata[3] = 0x00; |
dragomir | 0:c59276d46a12 | 78 | writedata[4] = 0x01; |
dragomir | 0:c59276d46a12 | 79 | |
dragomir | 0:c59276d46a12 | 80 | i2c.write(adresse, writedata, 6); // requête pour obtenir les mesures du capteur |
dragomir | 0:c59276d46a12 | 81 | HAL_Delay(7); |
dragomir | 0:c59276d46a12 | 82 | read = i2c.read(adresse, readdata, 5); // stock les mesures dans le tableau readdata |
dragomir | 0:c59276d46a12 | 83 | HAL_Delay(10); |
dragomir | 0:c59276d46a12 | 84 | |
dragomir | 0:c59276d46a12 | 85 | switch(read) { |
dragomir | 0:c59276d46a12 | 86 | |
dragomir | 0:c59276d46a12 | 87 | case 0: |
dragomir | 0:c59276d46a12 | 88 | drawImage_logo(0,0); |
dragomir | 0:c59276d46a12 | 89 | MSB = (int)readdata[2]; // affecte la valeur du MSB |
dragomir | 0:c59276d46a12 | 90 | LSB = (int)readdata[3]; // affecte la valeur du LSB |
dragomir | 0:c59276d46a12 | 91 | ppm = MSB*256+LSB; // calcul pour obtenir la valeur en ppm |
dragomir | 0:c59276d46a12 | 92 | sprintf(bufvalue,"%d",ppm); // conversion d'un nombre en caractère |
dragomir | 0:c59276d46a12 | 93 | BSP_LCD_SetBackColor(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 94 | BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE); |
dragomir | 0:c59276d46a12 | 95 | BSP_LCD_DisplayStringAt(40, 100, (uint8_t *)bufvalue, CENTER_MODE); |
dragomir | 0:c59276d46a12 | 96 | BSP_LCD_DisplayStringAt(120, 100, (uint8_t *)"ppm", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 97 | |
dragomir | 0:c59276d46a12 | 98 | if(ppm > 1500) { |
dragomir | 0:c59276d46a12 | 99 | |
dragomir | 0:c59276d46a12 | 100 | BSP_LCD_Clear(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 101 | BSP_LCD_DisplayStringAt(0, 130, (uint8_t *)"Evacuer la salle", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 102 | BSP_LCD_DisplayStringAt(0, 100, (uint8_t *)bufvalue, CENTER_MODE); |
dragomir | 0:c59276d46a12 | 103 | BSP_LCD_DisplayStringAt(90, 100, (uint8_t *)"ppm", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 104 | BSP_LCD_SetTextColor(LCD_COLOR_RED); |
dragomir | 0:c59276d46a12 | 105 | BSP_LCD_DisplayStringAt(0, 160, (uint8_t *)"seuil de CO2 mauvais", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 106 | BSP_LCD_DisplayStringAt(-165, 207, (uint8_t *)"<-", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 107 | drawImage_logo(0,0); |
dragomir | 0:c59276d46a12 | 108 | buzer.write(1); |
dragomir | 0:c59276d46a12 | 109 | } |
dragomir | 0:c59276d46a12 | 110 | |
dragomir | 0:c59276d46a12 | 111 | else if(ppm > 600 && ppm < 1000) { |
dragomir | 0:c59276d46a12 | 112 | |
dragomir | 0:c59276d46a12 | 113 | BSP_LCD_Clear(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 114 | BSP_LCD_SetBackColor(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 115 | BSP_LCD_SetTextColor(LCD_COLOR_LIGHTBLUE ); |
dragomir | 0:c59276d46a12 | 116 | BSP_LCD_DisplayStringAt(0, 150, (uint8_t *)"qualite air moderee", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 117 | BSP_LCD_DisplayStringAt(40, 100, (uint8_t *)bufvalue, CENTER_MODE); |
dragomir | 0:c59276d46a12 | 118 | BSP_LCD_DisplayStringAt(120, 100, (uint8_t *)"ppm", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 119 | BSP_LCD_SetTextColor(LCD_COLOR_BLUE); |
dragomir | 0:c59276d46a12 | 120 | BSP_LCD_DisplayStringAt(-165, 207, (uint8_t *)"<-", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 121 | drawImage_logo(0,0); |
dragomir | 0:c59276d46a12 | 122 | } |
dragomir | 0:c59276d46a12 | 123 | |
dragomir | 0:c59276d46a12 | 124 | else if(ppm > 400 && ppm < 600) { |
dragomir | 0:c59276d46a12 | 125 | |
dragomir | 0:c59276d46a12 | 126 | BSP_LCD_Clear(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 127 | BSP_LCD_SetBackColor(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 128 | BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE); |
dragomir | 0:c59276d46a12 | 129 | BSP_LCD_DisplayStringAt(0, 100, (uint8_t *)bufvalue, CENTER_MODE); |
dragomir | 0:c59276d46a12 | 130 | BSP_LCD_DisplayStringAt(80, 100, (uint8_t *)"ppm", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 131 | BSP_LCD_SetTextColor(LCD_COLOR_BLACK); |
dragomir | 0:c59276d46a12 | 132 | BSP_LCD_DisplayStringAt(0, 150, (uint8_t *)"qualite air moyen", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 133 | BSP_LCD_DisplayStringAt(-165, 207, (uint8_t *)"<-", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 134 | drawImage_logo(0,0); |
dragomir | 0:c59276d46a12 | 135 | |
dragomir | 0:c59276d46a12 | 136 | } |
dragomir | 0:c59276d46a12 | 137 | |
dragomir | 0:c59276d46a12 | 138 | else if(ppm <= 400) { |
dragomir | 0:c59276d46a12 | 139 | |
dragomir | 0:c59276d46a12 | 140 | BSP_LCD_Clear(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 141 | BSP_LCD_SetBackColor(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 142 | BSP_LCD_SetTextColor(LCD_COLOR_BLACK); |
dragomir | 0:c59276d46a12 | 143 | BSP_LCD_DisplayStringAt(0, 100, (uint8_t *)bufvalue, CENTER_MODE); |
dragomir | 0:c59276d46a12 | 144 | BSP_LCD_DisplayStringAt(80, 100, (uint8_t *)"ppm", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 145 | BSP_LCD_SetTextColor(LCD_COLOR_BLUE); |
dragomir | 0:c59276d46a12 | 146 | BSP_LCD_DisplayStringAt(0, 150, (uint8_t *)"qualite air excellente", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 147 | BSP_LCD_SetBackColor(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 148 | BSP_LCD_SetTextColor(LCD_COLOR_BLUE); |
dragomir | 0:c59276d46a12 | 149 | BSP_LCD_DisplayStringAt(-165, 207, (uint8_t *)"<-", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 150 | drawImage_logo(0,0); |
dragomir | 0:c59276d46a12 | 151 | } |
dragomir | 0:c59276d46a12 | 152 | |
dragomir | 0:c59276d46a12 | 153 | |
dragomir | 0:c59276d46a12 | 154 | BSP_LCD_SetBackColor(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 155 | BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE); |
dragomir | 0:c59276d46a12 | 156 | BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"QUALITE AIR", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 157 | |
dragomir | 0:c59276d46a12 | 158 | HAL_Delay(1000); |
dragomir | 0:c59276d46a12 | 159 | BSP_TS_GetState(&State); // initialise touch screen |
dragomir | 0:c59276d46a12 | 160 | coorX = State.touchX[0]; // récupére les coordonnées en x |
dragomir | 0:c59276d46a12 | 161 | coorY = State.touchY[0]; // récupére les coordonnées en y |
dragomir | 0:c59276d46a12 | 162 | BSP_LCD_SetFont(&LCD_DEFAULT_FONT); |
dragomir | 0:c59276d46a12 | 163 | BSP_LCD_SetBackColor(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 164 | BSP_LCD_DisplayStringAt(-165, 207, (uint8_t *)"<-", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 165 | |
dragomir | 0:c59276d46a12 | 166 | if(coorY >= 190 && coorY <= 250 && coorX >= 25 && coorX <= 70) { |
dragomir | 0:c59276d46a12 | 167 | BSP_LCD_DisplayStringAt(100, 50, (uint8_t *)"affichage des mesures", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 168 | BSP_LCD_Clear(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 169 | buzer.write(0); // eteind le buzer |
dragomir | 0:c59276d46a12 | 170 | etat = 1; |
dragomir | 0:c59276d46a12 | 171 | } |
dragomir | 0:c59276d46a12 | 172 | |
dragomir | 0:c59276d46a12 | 173 | break; |
dragomir | 0:c59276d46a12 | 174 | |
dragomir | 0:c59276d46a12 | 175 | case 1: |
dragomir | 0:c59276d46a12 | 176 | |
dragomir | 0:c59276d46a12 | 177 | BSP_LCD_SetBackColor(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 178 | BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE); |
dragomir | 0:c59276d46a12 | 179 | BSP_LCD_DisplayStringAt(50, 180, (uint8_t *)"I2C read nothing: ", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 180 | |
dragomir | 0:c59276d46a12 | 181 | break; |
dragomir | 0:c59276d46a12 | 182 | |
dragomir | 0:c59276d46a12 | 183 | } |
dragomir | 0:c59276d46a12 | 184 | |
dragomir | 0:c59276d46a12 | 185 | |
dragomir | 0:c59276d46a12 | 186 | ppm = 0; // met la valeur mesuré |
dragomir | 0:c59276d46a12 | 187 | break; |
dragomir | 0:c59276d46a12 | 188 | |
dragomir | 0:c59276d46a12 | 189 | case 1: |
dragomir | 0:c59276d46a12 | 190 | |
dragomir | 0:c59276d46a12 | 191 | |
dragomir | 0:c59276d46a12 | 192 | BSP_LCD_SetFont(&LCD_DEFAULT_FONT); |
dragomir | 0:c59276d46a12 | 193 | BSP_LCD_SetBackColor(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 194 | BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE); |
dragomir | 0:c59276d46a12 | 195 | BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"QUALITE AIR", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 196 | drawImage_logo(0,0); // logo iut |
dragomir | 0:c59276d46a12 | 197 | HAL_Delay(1000); |
dragomir | 0:c59276d46a12 | 198 | BSP_TS_GetState(&State); // initialise touch screen |
dragomir | 0:c59276d46a12 | 199 | coorX = State.touchX[0]; |
dragomir | 0:c59276d46a12 | 200 | coorY = State.touchY[0]; |
dragomir | 0:c59276d46a12 | 201 | BSP_LCD_SetTextColor(LCD_COLOR_BLUE); |
dragomir | 0:c59276d46a12 | 202 | BSP_LCD_DrawRect(180, 190, 120,40); |
dragomir | 0:c59276d46a12 | 203 | BSP_LCD_DisplayStringAt(0, 200, (uint8_t *)"mesure", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 204 | |
dragomir | 0:c59276d46a12 | 205 | if(coorY >= 180 && coorY <= 220 && coorX >= 220 && coorX <= 240) { |
dragomir | 0:c59276d46a12 | 206 | BSP_LCD_DisplayStringAt(100, 50, (uint8_t *)"mesures CO2 en ppm ", CENTER_MODE); |
dragomir | 0:c59276d46a12 | 207 | etat = 0; |
dragomir | 0:c59276d46a12 | 208 | BSP_LCD_Clear(LCD_COLOR_WHITE); |
dragomir | 0:c59276d46a12 | 209 | } |
dragomir | 0:c59276d46a12 | 210 | |
dragomir | 0:c59276d46a12 | 211 | else { |
dragomir | 0:c59276d46a12 | 212 | etat = 1; |
dragomir | 0:c59276d46a12 | 213 | } |
dragomir | 0:c59276d46a12 | 214 | |
dragomir | 0:c59276d46a12 | 215 | HAL_Delay(1000); |
dragomir | 0:c59276d46a12 | 216 | BSP_TS_ITClear(); |
dragomir | 0:c59276d46a12 | 217 | BSP_TS_ResetTouchData(&State); |
dragomir | 0:c59276d46a12 | 218 | |
dragomir | 0:c59276d46a12 | 219 | |
dragomir | 0:c59276d46a12 | 220 | break; |
dragomir | 0:c59276d46a12 | 221 | } |
dragomir | 0:c59276d46a12 | 222 | |
dragomir | 0:c59276d46a12 | 223 | |
dragomir | 0:c59276d46a12 | 224 | |
dragomir | 0:c59276d46a12 | 225 | |
dragomir | 0:c59276d46a12 | 226 | |
dragomir | 0:c59276d46a12 | 227 | |
dragomir | 0:c59276d46a12 | 228 | } |
dragomir | 0:c59276d46a12 | 229 | } |