Mesure le taux de CO2 avec le capteur Telaire T3320

Dependencies:   BSP_DISCO_F746NG

Committer:
dragomir
Date:
Tue Jun 22 09:43:46 2021 +0000
Revision:
0:c59276d46a12
Projet C02

Who changed what in which revision?

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