Bonjour,
j'ai un problème qui rend mon affichage sur mon écran tft pas joli .
je dispose d'un écrant tft featherwing 3.5 pouces de chez adafruit et d'un ESP32.
Donc mon problème est que j'aimerais figer mes images c'est à dire ,
par exemple pour mon capteur de gaz sgp30 .
//ECRAN
if ((sgp.TVOC) >=350 && (sgp.TVOC) <600)
reader.drawBMP("/jro.bmp", tft, 281, 51);
else if ((sgp.TVOC) > 600)
reader.drawBMP("/jrr.bmp", tft, 283, 54);
if ((sgp.eCO2) >=450 && (sgp.eCO2) <750)
reader.drawBMP("/jgo.bmp", tft, 0, 50);
else if ((sgp.eCO2) > 750)
reader.drawBMP("/jgr.bmp", tft, -1, 52);
si co2 >=450 & <750 j'affiche une image et si >750 une autre image.
Sauf le problème est qu'a chaque delay l'image disparait puis réaparait.
J'aimerais figer l'image le temps que le taux de co2 est compris entre 450 et 750 pas qu'elle disparaisse toute les 5 secondes avec mon delay.
mon code :
//SGP30
#include "Adafruit_SGP30.h"
Adafruit_SGP30 sgp;
uint32_t getAbsoluteHumidity(float temperature, float humidity) {
// approximation formula from Sensirion SGP30 Driver Integration chapter 3.15
const float absoluteHumidity = 216.7f * ((humidity / 100.0f) * 6.112f * exp((17.62f * temperature) / (243.12f + temperature)) / (273.15f + temperature)); // [g/m^3]
const uint32_t absoluteHumidityScaled = static_cast<uint32_t>(1000.0f * absoluteHumidity); // [mg/m^3]
return absoluteHumidityScaled;
}
//BME280
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
unsigned long delayTime;
//Ecran
#include <SPI.h>
#include "Adafruit_GFX.h"
#include "Adafruit_HX8357.h"
#ifdef ESP32
#define STMPE_CS 32
#define TFT_CS 15
#define TFT_DC 33
#define SD_CS 14
#endif
#define TFT_RST -1
// Use hardware SPI and the above for CS/DC
Adafruit_HX8357 tft = Adafruit_HX8357(TFT_CS, TFT_DC, TFT_RST);
//image
#include <SdFat.h> // SD card & FAT filesystem library
#include <Adafruit_SPIFlash.h> // SPI / QSPI flash library
#include <Adafruit_ImageReader.h> // Image-reading functions
#define USE_SD_CARD
#if defined(USE_SD_CARD)
SdFat SD; // SD card filesystem
Adafruit_ImageReader reader(SD); // Image-reader object, pass in SD filesys
#else
// SPI or QSPI flash filesystem (i.e. CIRCUITPY drive)
#if defined(__SAMD51__) || defined(NRF52840_XXAA)
Adafruit_FlashTransport_QSPI flashTransport(PIN_QSPI_SCK, PIN_QSPI_CS,
PIN_QSPI_IO0, PIN_QSPI_IO1, PIN_QSPI_IO2, PIN_QSPI_IO3);
#else
#if (SPI_INTERFACES_COUNT == 1)
Adafruit_FlashTransport_SPI flashTransport(SS, &SPI);
#else
Adafruit_FlashTransport_SPI flashTransport(SS1, &SPI1);
#endif
#endif
Adafruit_SPIFlash flash(&flashTransport);
FatFileSystem filesys;
Adafruit_ImageReader reader(filesys); // Image-reader, pass in flash filesys
#endif
Adafruit_Image img; // An image loaded into RAM
int32_t width = 0, // BMP image dimensions
height = 0;
#include <Fonts/FreeSerifBold18pt7b.h>
#include <Fonts/FreeSerif18pt7b.h>
void setup() {
Serial.begin(57600);
// put your setup code here, to run once:
//SGP30
while (!Serial) { delay(10); } // Wait for serial console to open!
Serial.println("SGP30 test");
if (! sgp.begin()){
Serial.println("Sensor not found :(");
while (1);
}
Serial.print("Found SGP30 serial #");
Serial.print(sgp.serialnumber[0], HEX);
Serial.print(sgp.serialnumber[1], HEX);
Serial.println(sgp.serialnumber[2], HEX);
// If you have a baseline measurement from before you can assign it to start, to 'self-calibrate'
//sgp.setIAQBaseline(0x8E68, 0x8F41); // Will vary for each sensor!
//BME280
while(!Serial); // time to get serial running
Serial.println(F("BME280 test"));
unsigned status;
status = bme.begin();
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
Serial.print(" ID of 0x60 represents a BME 280.\n");
while (1) delay(10);
}
Serial.println("-- Default Test --");
Serial.println();
//ECRAN
Serial.println("HX8357D Test!");
tft.begin();
// read diagnostics (optional but can help debug problems)
uint8_t x = tft.readcommand8(HX8357_RDPOWMODE);
Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
x = tft.readcommand8(HX8357_RDMADCTL);
Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
x = tft.readcommand8(HX8357_RDCOLMOD);
Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
x = tft.readcommand8(HX8357_RDDIM);
Serial.print("Image Format: 0x"); Serial.println(x, HEX);
x = tft.readcommand8(HX8357_RDDSDR);
Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX);
Serial.println(F("Benchmark Time (microseconds)"));
Serial.println(F("Done!"));
//image
ImageReturnCode stat; // Status from image-reading functions
Serial.print(F("Initializing filesystem..."));
#if defined(USE_SD_CARD)
// SD card is pretty straightforward, a single call...
if(!SD.begin(SD_CS, SD_SCK_MHZ(25))) { // ESP32 requires 25 MHz limit
Serial.println(F("SD begin() failed"));
for(;;); // Fatal error, do not continue
}
#else*
// SPI or QSPI flash requires two steps, one to access the bare flash
// memory itself, then the second to access the filesystem within...
if(!flash.begin()) {
Serial.println(F("flash begin() failed"));
for(;;);
}
if(!filesys.begin(&flash)) {
Serial.println(F("filesys begin() failed"));
for(;;);
}
#endif
Serial.println(F("OK!"));
tft.setRotation(1);
tft.fillScreen(HX8357_WHITE);
}
int counter = 0;
void loop() {
//SGP30
float temperature = bme.readTemperature(); // [°C]
float humidity = bme.readHumidity(); // [%RH]
sgp.setHumidity(getAbsoluteHumidity(temperature, humidity));
if (! sgp.IAQmeasure()) {
Serial.println("Measurement failed");
return;
}
Serial.print("Taux VOC : "); Serial.print(sgp.TVOC); Serial.println(" ppb\t");
Serial.print("Taux CO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm");
if (! sgp.IAQmeasureRaw()) {
Serial.println("Raw Measurement failed");
return;
}
Serial.print("Taux Brut H2 "); Serial.print(sgp.rawH2); Serial.println(" \t");
Serial.print("Taux Brut Ethanol "); Serial.print(sgp.rawEthanol); Serial.println("");
Serial.println();
counter++;
if (counter == 30) {
counter = 0;
uint16_t TVOC_base, eCO2_base;
if (! sgp.getIAQBaseline(&eCO2_base, &TVOC_base)) {
Serial.println("Failed to get baseline readings");
return;
}
Serial.print("****Baseline values: eCO2: 0x"); Serial.print(eCO2_base, HEX);
Serial.print(" & TVOC: 0x"); Serial.println(TVOC_base, HEX);
}
//image
reader.drawBMP("/imagefondb2.bmp", tft, 0, 0);
//ECRAN
if ((sgp.TVOC) >=350 && (sgp.TVOC) <600)
reader.drawBMP("/jro.bmp", tft, 281, 51);
else if ((sgp.TVOC) > 600)
reader.drawBMP("/jrr.bmp", tft, 283, 54);
if ((sgp.eCO2) >=450 && (sgp.eCO2) <750)
reader.drawBMP("/jgo.bmp", tft, 0, 50);
else if ((sgp.eCO2) > 750)
reader.drawBMP("/jgr.bmp", tft, -1, 52);
//BME280
printValues();
temp();
hum();
pression();
delay(5000);
}
void temp() {
tft.fillRect(50,250,70,50,HX8357_WHITE); //(x,y,width,heigh,color)
tft.setFont(&FreeSerifBold18pt7b);
tft.setCursor(55, 285);
if ((bme.readTemperature()) >=10 && (bme.readTemperature()) <14){
tft.setTextColor(0xFC80);
tft.println(bme.readTemperature(),1);
}
else if ((bme.readTemperature()) <=10){
tft.setTextColor(HX8357_RED);
tft.println(bme.readTemperature(),1);
}
else if ((bme.readTemperature()) >=14 && (bme.readTemperature()) <24){
tft.setTextColor(HX8357_GREEN);
tft.println(bme.readTemperature(),1);
}
else if ((bme.readTemperature()) >=24 && (bme.readTemperature()) <28){
tft.setTextColor(0xFC80);
tft.println(bme.readTemperature(),1);
}
else if ((bme.readTemperature()) >=28){
tft.setTextColor(HX8357_RED);
tft.println(bme.readTemperature(),1);
}
}
void hum(){
tft.fillRect(175,250,50,50,HX8357_WHITE); //(x,y,width,heigh,color)
tft.setFont(&FreeSerifBold18pt7b);
tft.setCursor(182, 285);
tft.setTextColor(HX8357_BLACK);
tft.println(bme.readHumidity(),0);
}
void pression() {
tft.fillRect(310,250,90,50,HX8357_WHITE); //(x,y,width,heigh,color)
tft.setFont(&FreeSerifBold18pt7b);
tft.setCursor(320, 285);
tft.setTextColor(HX8357_BLACK);
tft.println((bme.readPressure()/100.0F),0);
}
void printValues() {
Serial.print("Température = ");
Serial.print(bme.readTemperature());
Serial.println(" °C");
Serial.print("Pression = ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa");
Serial.print("Humidité = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
Serial.println("===================");
Serial.println();
}