Bonjour tous le monde,
Je crée ce poste lier au " Projet Control Unit" car je reste bloqué sur un problème d'affichage.
J'ai créé un logiciel sur Windows avec VS C++ pour transmettre des données via des trackBars, chaque envoie est précédés d'une lettre pour les différenciés, l'Arduino les réceptionnes et les affiches sur un écran LCD7" avec Shield.
Le problème est que s'il y'a trop de données l'arduino sature et les données deviennent incohérentes, j'ai cherché sans succès de limiter la réception et même la transmission.
Voila mon programme:
#include <UTFT.h>
#include <UTFT_tinyFAT.h>
// Declare which fonts we will be using
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
UTFT myGLCD(CTE70, 38, 39, 40, 41); //Screen initialization
UTFT_tinyFAT myFiles(&myGLCD);
int inByte;
int RPM;
int Speed;
int Accel;
int gearnum;
void setup() {
Serial.begin (9600);
myGLCD.InitLCD(LANDSCAPE);
myGLCD.clrScr();
file.initFAT();
myGLCD.setFont(BigFont);
myGLCD.fillScr(0, 0, 0);
myFiles.loadBitmap(0, 0, 800, 480, "Fond.RAW");
Menu1();
Zero4();
Zero3();
Gearboxnum();
}
void loop () {
while (Serial.available() > 0) {
int inByte = Serial.read(); // lire un premier caractère
// controle éventuel : décommenter pour voir ce qui arrive
//Serial.print("index : "); Serial.println(inByte);
// filtrer : il doit etre une lettre majuscule
if (inByte >= 'A') {
int valeur = Serial.parseInt();
// traitement
switch (inByte) {
case 'R':
if (valeur > 0) {
myGLCD.setFont(BigFont);
myGLCD.setColor(87, 255, 45);
myGLCD.setBackColor(0, 0, 0);
myGLCD.printNumI(valeur, 70, 75, 4, '0');
// controle eventuel de la valeur
Serial.print("RPM : "); Serial.println(valeur);
}
if (valeur > 9999) {}
break;
}
switch (inByte) {
case 'S': //
if (valeur > 0) {
myGLCD.setFont(BigFont);
myGLCD.setColor(87, 255, 45);
myGLCD.setBackColor(0, 0, 0);
myGLCD.printNumI(valeur, 280, 75, 3, '0');
// controle eventuel de la valeur
Serial.print("Speed : "); Serial.println(valeur);
}
if (valeur > 320) { }
break;
}
switch (inByte) {
case 'A':
if (valeur > 0) {
myGLCD.setFont(BigFont);
myGLCD.setColor(87, 255, 45);
myGLCD.setBackColor(0, 0, 0);
myGLCD.printNumI(valeur, 77, 315, 3, '0');
// controle eventuel de la valeur
Serial.print("Accel : "); Serial.println(valeur);
}
if (valeur > 100) { }
break;
}
switch (inByte) {
case 'G': //
if (valeur > 0) {
myGLCD.setFont(SevenSegNumFont);
myGLCD.setColor(0, 0, 0);
myGLCD.setBackColor(154, 217, 234);
myGLCD.printNumI(valeur, 733, 395, 1, '0');
// controle eventuel de la valeur
Serial.print("Speed : "); Serial.println(valeur);
}
break;
}
delay(10); //pas la peine de tourner à plein régime
}
}
}
void Menu1() // DATA DISPLAY MENU
{
//myGLCD.clrScr();
myGLCD.setFont(SmallFont);
myGLCD.setColor(0, 0, 255);
myGLCD.setBackColor(0, 0, 255);
myGLCD.setColor(195, 195, 195);
myGLCD.setBackColor(0, 0, 0);
myGLCD.setColor(255, 255, 255);
//Gauges Haut l6
myGLCD.print(" RPM ", 78, 95);
myGLCD.print(" SPEED", 280, 95);
myGLCD.print("Gauges", 480, 95);
myGLCD.print("Gauges", 682, 95);
//Gauges Milieu l6
myGLCD.print("Gauges", 78, 215);
myGLCD.print("Gauges", 280, 215);
myGLCD.print("Gauges", 480, 215);
myGLCD.print("Gauges", 682, 215);
//Gauges Bas l6
myGLCD.print(" ACCEL", 78, 335);
myGLCD.print("Gauges", 280, 335);
myGLCD.print("Gauges", 480, 335);
myGLCD.print("Gauges", 682, 335);
}
void Zero4()
{
int valeur = 0;
myGLCD.setFont(BigFont);
myGLCD.setColor(87, 255, 45);
myGLCD.setBackColor(0, 0, 0);
myGLCD.printNumI(valeur, 70, 75, 4, '0');
}
void Zero3()
{
int valeur = 0;
myGLCD.setFont(BigFont);
myGLCD.setColor(87, 255, 45);
myGLCD.setBackColor(0, 0, 0);
//Haut
myGLCD.printNumI(valeur, 280, 75, 3, '0');
//Milieu
//myGLCD.printNumI(valeur, 77, 195, 3, '0');
//Bas
myGLCD.printNumI(valeur, 77, 315, 3, '0');
}
void Gearboxnum()
{
int valeur = 0;
myGLCD.setFont(SevenSegNumFont);
myGLCD.setColor(0, 0, 0);
myGLCD.setBackColor(154, 217, 234);
myGLCD.printNumI(valeur, 733, 395, 1, '0');
}
ICI la vidéo de démonstration.
Merci d'avance pour votre aide.