slt , suis toujours sur mon prog , la partie programmation de la machine a état étant fini
je passe a la partie affichage sur un écran TFT 3,5" ILI 9486
depuis un module RTC je veux afficher l'heure et la date j'ai donc crée plusieurs rectangles avec bord blanc et fond noir.
dans un des rectangles j'affiche l'heure et la date et pour pouvoir actualiser l'heure j'efface a chaque boucle en remplissant de nouveau le rectangle en noir , je l'ai fais intuitivement mais cela clignote un peu , environ deux ou trois fois par seconde , je vous donne mon code si quelqu'un a une idée a me soumettre pour que cela ne clignote plus merci d'avance.
#include "Adafruit_GFX.h"
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#include <SPI.h> //Librairie à installer
#include <SD.h> //Librairie à installer
#include <DS3231.h> //Librairie à installer
DS3231 monRTC(SDA, SCL);
// définition des couleurs (mot clé en anglais)
#define BLACK 0x0000
#define WHITE 0xFFFF
#define RED 0xF800
void setup() {
Serial.begin(9600);
monRTC.begin();
tft.reset();
tft.begin(0x9486);
tft.setRotation(3);
tft.fillScreen(BLACK);
tft.drawRect(0, 0, 480, 50, WHITE);
tft.drawRect(0, 50, 480, 220, WHITE);
tft.drawRect(0, 270, 480, 50, WHITE);
tft.drawLine(160, 270, 160, 320, WHITE);
tft.setCursor(30, 15);
tft.setTextColor(RED);
tft.setTextSize(3);
tft.print("STATION METEO");
}
void loop()
{
tft.fillRect(1,271,158,48,BLACK);
tft.setCursor(23, 275);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.print(monRTC.getDateStr());
tft.setCursor(33, 300);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.print(monRTC.getTimeStr());
String temps = String(monRTC.getTimeStr()); // On demande l'heure exacte au module Real Time Clock.
String dates = String(monRTC.getDateStr());
Serial.println(monRTC.getTimeStr());
}
idéalement il ne faut "repeindre" que les parties qui ont changé et donc ne pas tout effacer à chaque loop pour réafficher la même chose --> c'est ce qui fait clignoter
De plus ta boucle loop va très vite et elle doit afficher peut être quelques centaines de fois par seconde. Il vaut mieux afficher l'heure une fois par seconde ou par minute selon ton format d'affichage.
Pour cela tu utilises millis() et tu comptes le temps qui passe avant de changer l'affichage. Tu peux ainsi faire d'autres choses en attendant.
Avec la librairie Adafruit_GFX, si tu définis la couleur de fond du texte tu n'as pas besoin d'effacer avant d'écrire, la librairie le gère elle même.
par exemple au lieu d'utiliser
JML: j'utilise la librairie DS3231.h et effectivement je ne remplissais que la plus petite parti. mais le résultat n'était pas satisfaisant.
Lesept : j'ai aussi pour faire un essai simple mis un délai de 1000 c'était déjà mieux mais toujours un clignotement donc pas satisfaisant non plus , donc du coup je ne me suis pas cassé la tête a mettre un Millis.
Zarb 94: je tenais a avoir les secondes et de toutes manière j'airais eut un clignotement.
ET finalement la bonne solution fdufnews: le:
tft.setTextColor(RED, BLACK);
fonctionne a merveille, exactement ce que je voulais, plus de clignotement et l'égrainage des secondes.
goldoseb:
cela consomme t'il quelque chose qui pourrait être économisé de cette manière?
ça doit consommer un chouia tout petit d'électricité en plus et ça occupe le processeur pour rien. si vous n'avez rien d'autre à faire dans le code alors pourquoi pas laisser comme cela mais si vous voulez faire d'autres trucs, genre tester des boutons ou autres clignotage de LEDs vous aurez une moindre réactivité