Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BSP_DISCO_F746NG
Diff: main.cpp
- Revision:
- 0:c59276d46a12
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Tue Jun 22 09:43:46 2021 +0000
@@ -0,0 +1,229 @@
+#include "mbed.h"
+#include "ft5336.h"
+#include "stm32746g_discovery.h"
+#include "stm32746g_discovery_lcd.h"
+#include "stm32746g_discovery_ts.h"
+#include "logo.h"
+
+void drawImage_logo(int offsetX, int offsetY)
+{
+ int x = 0;
+ int y = 0;
+ uint32_t* dataPtr = (uint32_t*)logo.data;
+ while(y < logo.height) {
+ while(x < logo.width) {
+ BSP_LCD_DrawPixel(x + offsetX, y + offsetY, *dataPtr);
+ dataPtr++;
+ x++;
+ }
+ x = 0;
+ y++;
+ }
+}
+
+TS_StateTypeDef State;
+TS_TouchEventTypeDef event;
+DigitalOut buzer(PG_6);
+I2C i2c(PB_9,PB_8); // initialisation des broches I2C
+
+
+
+int main()
+{
+
+ char readdata[6] = {};
+ char writedata[6] = {};
+ int frequence = 100000;
+ int x = 0;
+ int y = 0;
+ int read = 0;
+ uint8_t adresse = 42; // adresse du capteur
+ uint8_t coorX = 100;
+ uint8_t coorY = 100;
+ char buf[20] = {0};
+ char buf2[20] = {0};
+ char buffer[10] = {};
+ char bufvalue[10] = {};
+ int MSB = 0; // most significant bit
+ int LSB = 0; // less signifiicant bit
+ int ppm = 0;
+ int etat = 1;
+
+ BSP_LCD_Init(); // initialisation du LCD
+ BSP_TS_Init(BSP_LCD_GetXSize(),BSP_LCD_GetYSize()); // initialisation du touch screen
+ BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
+ BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
+ i2c.frequency(frequence); // frequence de communication imposee par le maître
+
+
+ int i = 0;
+
+
+ BSP_LCD_Clear(LCD_COLOR_WHITE);
+
+ while (1) {
+
+
+
+ switch(etat)
+
+ {
+
+ case 0 :
+
+ writedata[0] = 0x04;
+ writedata[1] = 0x13;
+ writedata[2] = 0x8B;
+ writedata[3] = 0x00;
+ writedata[4] = 0x01;
+
+ i2c.write(adresse, writedata, 6); // requête pour obtenir les mesures du capteur
+ HAL_Delay(7);
+ read = i2c.read(adresse, readdata, 5); // stock les mesures dans le tableau readdata
+ HAL_Delay(10);
+
+ switch(read) {
+
+ case 0:
+ drawImage_logo(0,0);
+ MSB = (int)readdata[2]; // affecte la valeur du MSB
+ LSB = (int)readdata[3]; // affecte la valeur du LSB
+ ppm = MSB*256+LSB; // calcul pour obtenir la valeur en ppm
+ sprintf(bufvalue,"%d",ppm); // conversion d'un nombre en caractère
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE);
+ BSP_LCD_DisplayStringAt(40, 100, (uint8_t *)bufvalue, CENTER_MODE);
+ BSP_LCD_DisplayStringAt(120, 100, (uint8_t *)"ppm", CENTER_MODE);
+
+ if(ppm > 1500) {
+
+ BSP_LCD_Clear(LCD_COLOR_WHITE);
+ BSP_LCD_DisplayStringAt(0, 130, (uint8_t *)"Evacuer la salle", CENTER_MODE);
+ BSP_LCD_DisplayStringAt(0, 100, (uint8_t *)bufvalue, CENTER_MODE);
+ BSP_LCD_DisplayStringAt(90, 100, (uint8_t *)"ppm", CENTER_MODE);
+ BSP_LCD_SetTextColor(LCD_COLOR_RED);
+ BSP_LCD_DisplayStringAt(0, 160, (uint8_t *)"seuil de CO2 mauvais", CENTER_MODE);
+ BSP_LCD_DisplayStringAt(-165, 207, (uint8_t *)"<-", CENTER_MODE);
+ drawImage_logo(0,0);
+ buzer.write(1);
+ }
+
+ else if(ppm > 600 && ppm < 1000) {
+
+ BSP_LCD_Clear(LCD_COLOR_WHITE);
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_LIGHTBLUE );
+ BSP_LCD_DisplayStringAt(0, 150, (uint8_t *)"qualite air moderee", CENTER_MODE);
+ BSP_LCD_DisplayStringAt(40, 100, (uint8_t *)bufvalue, CENTER_MODE);
+ BSP_LCD_DisplayStringAt(120, 100, (uint8_t *)"ppm", CENTER_MODE);
+ BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
+ BSP_LCD_DisplayStringAt(-165, 207, (uint8_t *)"<-", CENTER_MODE);
+ drawImage_logo(0,0);
+ }
+
+ else if(ppm > 400 && ppm < 600) {
+
+ BSP_LCD_Clear(LCD_COLOR_WHITE);
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE);
+ BSP_LCD_DisplayStringAt(0, 100, (uint8_t *)bufvalue, CENTER_MODE);
+ BSP_LCD_DisplayStringAt(80, 100, (uint8_t *)"ppm", CENTER_MODE);
+ BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
+ BSP_LCD_DisplayStringAt(0, 150, (uint8_t *)"qualite air moyen", CENTER_MODE);
+ BSP_LCD_DisplayStringAt(-165, 207, (uint8_t *)"<-", CENTER_MODE);
+ drawImage_logo(0,0);
+
+ }
+
+ else if(ppm <= 400) {
+
+ BSP_LCD_Clear(LCD_COLOR_WHITE);
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
+ BSP_LCD_DisplayStringAt(0, 100, (uint8_t *)bufvalue, CENTER_MODE);
+ BSP_LCD_DisplayStringAt(80, 100, (uint8_t *)"ppm", CENTER_MODE);
+ BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
+ BSP_LCD_DisplayStringAt(0, 150, (uint8_t *)"qualite air excellente", CENTER_MODE);
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
+ BSP_LCD_DisplayStringAt(-165, 207, (uint8_t *)"<-", CENTER_MODE);
+ drawImage_logo(0,0);
+ }
+
+
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE);
+ BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"QUALITE AIR", CENTER_MODE);
+
+ HAL_Delay(1000);
+ BSP_TS_GetState(&State); // initialise touch screen
+ coorX = State.touchX[0]; // récupére les coordonnées en x
+ coorY = State.touchY[0]; // récupére les coordonnées en y
+ BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_DisplayStringAt(-165, 207, (uint8_t *)"<-", CENTER_MODE);
+
+ if(coorY >= 190 && coorY <= 250 && coorX >= 25 && coorX <= 70) {
+ BSP_LCD_DisplayStringAt(100, 50, (uint8_t *)"affichage des mesures", CENTER_MODE);
+ BSP_LCD_Clear(LCD_COLOR_WHITE);
+ buzer.write(0); // eteind le buzer
+ etat = 1;
+ }
+
+ break;
+
+ case 1:
+
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE);
+ BSP_LCD_DisplayStringAt(50, 180, (uint8_t *)"I2C read nothing: ", CENTER_MODE);
+
+ break;
+
+ }
+
+
+ ppm = 0; // met la valeur mesuré
+ break;
+
+ case 1:
+
+
+ BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE);
+ BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"QUALITE AIR", CENTER_MODE);
+ drawImage_logo(0,0); // logo iut
+ HAL_Delay(1000);
+ BSP_TS_GetState(&State); // initialise touch screen
+ coorX = State.touchX[0];
+ coorY = State.touchY[0];
+ BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
+ BSP_LCD_DrawRect(180, 190, 120,40);
+ BSP_LCD_DisplayStringAt(0, 200, (uint8_t *)"mesure", CENTER_MODE);
+
+ if(coorY >= 180 && coorY <= 220 && coorX >= 220 && coorX <= 240) {
+ BSP_LCD_DisplayStringAt(100, 50, (uint8_t *)"mesures CO2 en ppm ", CENTER_MODE);
+ etat = 0;
+ BSP_LCD_Clear(LCD_COLOR_WHITE);
+ }
+
+ else {
+ etat = 1;
+ }
+
+ HAL_Delay(1000);
+ BSP_TS_ITClear();
+ BSP_TS_ResetTouchData(&State);
+
+
+ break;
+ }
+
+
+
+
+
+
+ }
+}