Je travail sur un projet que je suis en train d'optimiser.
Le problème plus gros est l'effet blinking que j'ai sur l'affichage de la vitesse car j'utilise comme font le joli "FreeSevenSegNumFont" en size = 3 donc assez gros!! Le tout rafraîchi toutes le 2 sec.
J'ai donc réfléchie comme réduire cet effet.
J'ai élaboré ça:
#include <SPI.h> /
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
//#include <FreeDefaultFonts.h>
// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
int l = 40, h = 40, posx = 100, posy = 50;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
tft.begin(0x9486);
tft.setRotation(1);
tft.fillScreen(BLACK);
//tft.setTextColor(WHITE, BLACK);
}
void loop() {
char a = "";
// put your main code here, to run repeatedly:
if (Serial.available() > 0)
{
Cancella();
a = Serial.read();
Serial.println(a);
}
if (a == '0')
{
Orizzontale(posx + 1, posy + h + h - 8);
Verticale(posx, posy + h - 4);
Verticale(posx + l + 8, posy + h - 4);
//Orizzontale(posx+1, posy + h - 4);
Verticale(posx, posy);
Verticale(posx + l + 8, posy);
Orizzontale(posx + 1, posy);
}
if (a == '1')
{
Serial.println(a);
//Orizzontale(posx+1, posy + h + h-8);
//Verticale(posx, posy + h-4);
Verticale(posx + l + 8, posy + h - 4);
//Orizzontale(posx+1, posy + h - 4);
//Verticale(posx, posy);
Verticale(posx + l + 8, posy);
//Orizzontale(posx+1, posy);
}
if (a == '2')
{
Serial.println(a);
Orizzontale(posx + 1, posy + h + h - 8);
Verticale(posx, posy + h - 4);
//Verticale(posx + l+8, posy + h-4);
Orizzontale(posx + 1, posy + h - 4);
//Verticale(posx, posy);
Verticale(posx + l + 8, posy);
Orizzontale(posx + 1, posy);
}
if (a == '3')
{
Serial.println(a);
Orizzontale(posx + 1, posy + h + h - 8);
//Verticale(posx, posy + h-4);
Verticale(posx + l + 8, posy + h - 4);
Orizzontale(posx + 1, posy + h - 4);
//Verticale(posx, posy);
Verticale(posx + l + 8, posy);
Orizzontale(posx + 1, posy);
}
if (a == '4')
{
Serial.println(a);
//Orizzontale(posx+1, posy + h + h-8);
//Verticale(posx, posy + h-4);
Verticale(posx + l + 8, posy + h - 4);
Orizzontale(posx + 1, posy + h - 4);
Verticale(posx, posy);
Verticale(posx + l + 8, posy);
//Orizzontale(posx+1, posy);
}
if (a == '5')
{
Serial.println(a);
Orizzontale(posx + 1, posy + h + h - 8);
//Verticale(posx, posy + h-4);
Verticale(posx + l + 8, posy + h - 4);
Orizzontale(posx + 1, posy + h - 4);
Verticale(posx, posy);
//Verticale(posx + l+8, posy);
Orizzontale(posx + 1, posy);
}
if (a == '6')
{
Serial.println(a);
Orizzontale(posx + 1, posy + h + h - 8);
Verticale(posx, posy + h - 4);
Verticale(posx + l + 8, posy + h - 4);
Orizzontale(posx + 1, posy + h - 4);
Verticale(posx, posy);
//Verticale(posx + l+8, posy);
Orizzontale(posx + 1, posy);
}
if (a == '7')
{
Serial.println(a);
//Orizzontale(posx+1, posy + h + h-8);
//Verticale(posx, posy + h-4);
Verticale(posx + l + 8, posy + h - 4);
//Orizzontale(posx+1, posy + h - 4);
//Verticale(posx, posy);
Verticale(posx + l + 8, posy);
Orizzontale(posx + 1, posy);
}
if (a == '8')
{
Serial.println(a);
Orizzontale(posx + 1, posy + h + h - 8);
Verticale(posx, posy + h - 4);
Verticale(posx + l + 8, posy + h - 4);
Orizzontale(posx + 1, posy + h - 4);
Verticale(posx, posy);
Verticale(posx + l + 8, posy);
Orizzontale(posx + 1, posy);
}
if (a == '9')
{
Serial.println(a);
Orizzontale(posx + 1, posy + h + h - 8);
//Verticale(posx, posy + h-4);
Verticale(posx + l + 8, posy + h - 4);
Orizzontale(posx + 1, posy + h - 4);
Verticale(posx, posy);
Verticale(posx + l + 8, posy);
Orizzontale(posx + 1, posy);
}
}
void Orizzontale(int posxa, int posya)//écrit les segment horizontaux
{
for (int a = 0; a < 12; a++)
{
tft.drawLine(posxa + abs(6 - a), posya + a, posxa + l + (6 - abs(6 - a)), posya + a, WHITE); //orizzontale
}
}
void Verticale(int posxa, int posya)//écrit les segment verticaux
{
for (int a = 0; a < 12; a++)
{
tft.drawLine(posxa - (6 - a), posya + abs(6 - a) + 8, posxa - (6 - a), posya - abs(6 - a) + h, WHITE); //verticale
}
}
void OrizzontaleC(int posxa, int posya)//efface les segment horizontaux
{
for (int a = 0; a < 12; a++)
{
tft.drawLine(posxa + abs(6 - a), posya + a, posxa + l + (6 - abs(6 - a)), posya + a, BLACK); //orizzontale
}
}
void VerticaleC(int posxa, int posya)//efface les segment verticaux
{
for (int a = 0; a < 12; a++)
{
tft.drawLine(posxa - (6 - a), posya + abs(6 - a) + 8, posxa - (6 - a), posya - abs(6 - a) + h, BLACK); //verticale
}
}
void Cancella()//ecrit un 8 en noir donc efface le numéro precedent
{
OrizzontaleC(posx + 1, posy + h + h - 8);
VerticaleC(posx, posy + h - 4);
VerticaleC(posx + l + 8, posy + h - 4);
OrizzontaleC(posx + 1, posy + h - 4);
VerticaleC(posx, posy);
VerticaleC(posx + l + 8, posy);
OrizzontaleC(posx + 1, posy);
}
Dans le code on peux modifier la largeur (l), la hauteur (h) et la position (posx posy) du nombre que on saisie à l'aide du moniteur serie.
Si vous voulez l'essayer il faut sûrement modifier le modèle de l’écran et installer la bibliothèque MCUFRIEND_kbv.
C'est en version test qui marche assez bien mais pas parfait.
L'effet blinking est encore présente mais il se manifeste avec un légere baisse de luminosité du numéro.
Avez vous des conseils à me donner pour optimiser encore plus ce code?