Ciao,
utilizzo un TFT 4.3 per visualizzare dei dati su una vettura, visualizzo 3 dati, letti sulle porte analogiche; inoltre visualizzo un indicatore marce ( che prende i segnali da 5 switch posti sul leveraggio innesto marce), e altri vari allarmi etc.
Il "problema" è questo: i 3 valori visualizzati sul display funzionano correttamente se nessuna marcia è inserita, mentre con qualsiasi marcia inserita i decimali (o le ultime 2 cifre) visualizzate, vibrano molto velocemente. Ho provato a rallentare la lettura e la stampata sul display di questi 3 valori, e anche della parte che visualizza la marcia inserita, ma senza successo. Ho verificato anche disturbi hardware, ma il problema si verifica anche facendo funzionare tutto su banco.
Mi è venuto in mente che forse ho complicato troppo il codice nella parte di visualizzazione della marcia, potrebbe essere quello? Potrei semplificare in qualche modo la lettura degli switch? Vi allego il codice qua sotto (non tutto perchè è enorme, se poi serve, basta chiedere) grazie per l'aiuto.
//********************** controllo switch per segnalatore marcia ***************************************
if (millis() - pmillis >= 300) { // controllo marce ogni 300 ms
Mmillis = millis ();
zero = digitalRead (RETRO); // leggo il bulbo retromarcia
if (zero == 0) // verifico se è inserita la retro
{
if (retrom == false) //controllo se ho già scritto la R
{
myGLCD.setFont(BigNum); //numeri giganti
myGLCD.setColor(255, 0, 0); //colore numeri
myGLCD.setBackColor (0, 0, 0); //colore sfondo scritta
myGLCD.print("7", CENTER, 0); //scrivo il numero marcia, il 7 fa la R
retrom = true; //avviso che ho scritto
}
}
else { // da quà controllo tutte le altre marce se non c'è la retro
retrom = false; //azzero la R per poterla riscrivere
zero = digitalRead (SX); // leggo lo switch marce SX
if (zero == 0) // verifico se è premuto lo switch
{
zero = digitalRead (FRONT); // leggo lo switch marce FRONT
if (zero == 0) // verifico se è premuto lo switch
{
if (uno == false)
{
myGLCD.setFont(BigNum); //numeri giganti
myGLCD.setColor(255, 0, 0); //colore numeri
myGLCD.setBackColor (0, 0, 0); //colore sfondo scritta
myGLCD.print("1", CENTER, 0); //scrivo il numero marcia
uno = true; //avviso che ho scritto
}
}
else {
uno = false; //azzero l'uno per poterlo riscrivere
}
zero = digitalRead (REAR); // leggo lo switch marce REAR
if (zero == 0) // verifico se è premuto lo switch
{
if (due == false)
{
myGLCD.setFont(BigNum); //numeri giganti
myGLCD.setColor(255, 0, 0); //colore numeri
myGLCD.setBackColor (0, 0, 0); //colore sfondo scritta
myGLCD.print("2", CENTER, 0); //scrivo il numero marcia
due = true; //avviso che ho scritto
}
}
else {
due = false; //azzero il due per poterlo riscrivere
}
}
else
{
uno = false; //azzero l'uno per poterlo riscrivere
due = false; //azzero il due per poterlo riscrivere
}
zero = digitalRead (DX); // leggo lo switch marce DX
if (zero == 0) // verifico se è premuto lo switch
{
zero = digitalRead (FRONT); // leggo lo switch marce FRONT
if (zero == 0) // verifico se è premuto lo switch
{
if (cinque == false)
{
myGLCD.setFont(BigNum); //numeri giganti
myGLCD.setColor(255, 0, 0); //colore numeri
myGLCD.setBackColor (0, 0, 0); //colore sfondo scritta
myGLCD.print("5", CENTER, 0); //scrivo il numero marcia
cinque = true; //avviso che ho scritto
}
}
else {
cinque = false; //azzero il 5 per poterlo riscrivere
}
zero = digitalRead (REAR); // leggo lo switch marce REAR
if (zero == 0) // verifico se è premuto lo switch
{
if (sei == false)
{
myGLCD.setFont(BigNum); //numeri giganti
myGLCD.setColor(255, 0, 0); //colore numeri
myGLCD.setBackColor (0, 0, 0); //colore sfondo scritta
myGLCD.print("6", CENTER, 0); //scrivo il numero marcia
sei = true; //avviso che ho scritto
}
}
else {
sei = false; //azzero il 6 per poterlo riscrivere
}
}
else
{
cinque = false; //azzero il 5 per poterlo riscrivere
sei = false; //azzero il 6 per poterlo riscrivere
}
if (uno == false) // controlla la 3° solo se non è in 1°
{
if (cinque == false) // controlla la 3° solo se non è in 5°
{
zero = digitalRead (FRONT); // leggo lo switch marce FRONT
if (zero == 0) // verifico se è premuto lo switch
{
if (tre == false)
{
myGLCD.setFont(BigNum); //numeri giganti
myGLCD.setColor(255, 0, 0); //colore numeri
myGLCD.setBackColor (0, 0, 0); //colore sfondo scritta
myGLCD.print("3", CENTER, 0); //scrivo il numero marcia
tre = true; //avviso che ho scritto
}
}
else {
tre = false; //azzero il 3 per poterlo riscrivere
}
}
}
if (sei == false) // controlla la 4° solo se non è in 6°
{
if (due == false) // controlla la 4° solo se non è in 2°
{
zero = digitalRead (REAR); // leggo lo switch marce REAR
if (zero == 0) // verifico se è premuto lo switch
{
if (quattro == false)
{
myGLCD.setFont(BigNum); //numeri giganti
myGLCD.setColor(255, 0, 0); //colore numeri
myGLCD.setBackColor (0, 0, 0); //colore sfondo scritta
myGLCD.print("4", CENTER, 0); //scrivo il numero marcia
quattro = true; //avviso che ho scritto
}
}
else {
quattro = false; //azzero il 4 per poterlo riscrivere
}
}
}
if (uno == false)
{
if (due == false)
{
if (tre == false)
{
if (quattro == false)
{
if (cinque == false)
{
if (sei == false)
{
if (retrom == false)
{
myGLCD.setFont(BigNum); //numeri giganti
myGLCD.setColor(0, 0, 0); //colore numeri
myGLCD.setBackColor (0, 0, 0); //colore sfondo scritta
myGLCD.print(" ", CENTER, 0); //cancella i numeri
}
}
}
}
}
}
}
}
}
//************************* fine controllo switch marce ***************************