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
main.cpp
- Committer:
- dragomir
- Date:
- 2021-06-22
- Revision:
- 0:c59276d46a12
File content as of revision 0:c59276d46a12:
#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;
}
}
}