Bonjour,
Je travaille sur ESP32 et mon écran est un écran d'adafruit 3.5 pouces featherwing.
J'aimerais savoir si c'est possible de faire sur le même écran tft plusieurs actualisations.
C'est à dire de mon programme :
actualiser la température toute les 10 secondes et l'humidité toutes les 30 secondes par exemple.
La mon programme me fait un décalage m'affiche la température puis l'humidité après.
Mon programme :
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
unsigned long delayTime;
#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);
void setup() {
Serial.begin(115200);
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 --");
delayTime = 1000;
Serial.println();
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!"));
}
void loop(void) {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" °C");
tft.setRotation(1);
tft.fillScreen(HX8357_WHITE);
tft.setCursor(0,25);
tft.setTextColor(HX8357_BLUE);
tft.setTextSize(3);
tft.println("Temperature :");
tft.setCursor(0, 50);
tft.setTextColor(HX8357_BLUE);
tft.setTextSize(3);
tft.println(bme.readTemperature());
delay(5000);
tft.setCursor(300, 175);
tft.setTextColor(HX8357_GREEN);
tft.setTextSize(3);
tft.println("Humidite :");
tft.setCursor(300, 200);
tft.setTextColor(HX8357_GREEN);
tft.setTextSize(3);
tft.println(bme.readHumidity());
delay(5000);
}
Le programme il fait ce que tu lui dis de faire.
Actuellement, tu lui dis d'afficher la température, d'attendre 5 secondes, d'afficher l'humidité, d'attendre 5 secondes et de recommencer.
Si tu veux un cadencement différent, il va falloir modifier le déroulement de ta séquence dans loop().
Tu vas avoir 2 séquences concourantes avec des temporisations différentes, ce qui n'est pas très pratique à gérer avec delay().
Tu devrais regarder le fonctionnement de BlinkWithoutDelay, dans les exemples de codes installés avec l'IDE, car cela permet de faire exécuter des tâches en fonction du temps.
Merci pour ton exemple, j'ai donc remplacer et je constate que j'ai le "le même problème"
L'actualisation des valeurs ce fait que quand mon écran se rafraichit.
dans mon cas au bout de 20 secondes ducoup et lorsque que je met pas mon delay 20000, ça ne fonctionne pas l'écran clignotte .
mon programme :
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
unsigned long delayTime;
#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);
uint32_t chronoTemperature;
const uint32_t dureeTemperature = 5000; // en ms = 10s
uint32_t chronoHumidite;
const uint32_t dureeHumidite = 10000; // en ms = 30s
void setup() {
Serial.begin(57600);
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 --");
delayTime = 1000;
Serial.println();
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!"));
}
void loop(void) {
uint32_t maintenant = millis();
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" °C");
tft.setRotation(1);
tft.fillScreen(HX8357_WHITE);
tft.setCursor(0,25);
tft.setTextColor(HX8357_BLUE);
tft.setTextSize(3);
tft.println("Temperature :");
if (maintenant - chronoTemperature >= dureeTemperature) {
Serial.println("Mise à jour température");
tft.setCursor(0, 50);
tft.setTextColor(HX8357_BLUE);
tft.setTextSize(3);
tft.println(bme.readTemperature());
chronoTemperature = maintenant;
}
tft.setCursor(300, 175);
tft.setTextColor(HX8357_GREEN);
tft.setTextSize(3);
tft.println("Humidite :");
if (maintenant - chronoHumidite >= dureeHumidite) {
Serial.println("Mise à jour humidite");
tft.setCursor(300, 200);
tft.setTextColor(HX8357_GREEN);
tft.setTextSize(3);
tft.println(bme.readHumidity());
chronoHumidite = maintenant;
}
delay(20000);
}
ben vous avez conservé les affichages à chaque tour de la loop? il ne faut pas... ➜ il faut afficher juste quand c'est le moment. (et peut-être mettre un rectangle de la couleur du fond pour effacer ce qu'il y avait avant, pas forcément besoin de ré-afficher les étiquettes)