RISOLTO - Display 20x4, come cambiare testo

Buonasera a tutti.

Sto realizzando una centralina antifurto a cinque ingressi. Lo sketch è molto semplice: vengono controllati cinque ingressi e se almeno uno di questi passa a livello logico 0, scatta l'allarme portando a livello logico 1 l'uscita.

Una volta attivato l'allarme, sul display (20x4) vengono mostrati gli stati "logici" dei cinque sensori (denominati "sensore_1", "sensore_2" ecc...), ma vorrei poter sostituire questi banali "0" e "1" con altre stringhe di testo, ad esempio "tutto ok" (nel caso il livello sia 1) e "Allarme!" nel caso il livello mostrato sia "0". Sapete se esiste una funzione che modifichi il testo o qualche altra soluzione?

Di seguito la parte di codice che viene attivata qualora l'allarme si sia attivato:

else
{
//attiva uscita sirena
digitalWrite(uscita, HIGH);
//attiva un suono nel buzzer
tone(6, 2000, 1000);
//mostra stato logico dei sensori
lcd.setCursor(0, 1);
lcd.clear();
lcd.print("Allarme sensore!");
    lcd.setCursor(0, 3);
    lcd.print("Zone:");
    lcd.setCursor(6, 3);
    lcd.print(sensore_1);
    lcd.setCursor(9, 3);
    lcd.print(sensore_2);
    lcd.setCursor(12, 3);
    lcd.print(sensore_3);
    lcd.setCursor(15, 3);
    lcd.print(sensore_4);
    lcd.setCursor(18, 3);
    lcd.print(sensore_5);
    delay(3000);

}

Grazie e buona serata!

Fai una semplice if e 2 stampe a seconda del valore:

if(sensore_2==0)
  lcd.print( "spento" );
else
  lcd.print( "acceso");

In forma più stringata ma meno leggibile:

lcd.print( (sensore_2==0 ? "spento" : "acceso") );  // iif( test, vero, falso)

nid69ita:
In forma più stringata ma meno leggibile:

lcd.print( (sensore_2==0 ? "spento" : "acceso") );  // iif( test, vero, falso)

essendo stati logici la versione ancora più stringata e meno leggibile :smiley:

lcd.print( (sensore_2 ? "acceso" : "spento") );

Perfetto, grazie!!

Forse poi quegli 0 oppure 1 equivalgono a LOW e HIGH.
Ovvero HIGH e LOW in realtà sono solo delle "costanti" che valgono 1 e 0

nid69ita:
Forse poi quegli 0 oppure 1 equivalgono a LOW e HIGH.
Ovvero HIGH e LOW in realtà sono solo delle "costanti" che valgono 1 e 0

Si esatto, possono valere solo 1 o 0

Questo è il codice che ho pensato per far apparire sul display le "zone" in allarme.
Si presenterebbe solo un problema nel caso in cui si attivino contemporaneamente tutti e cinque i sensori (caso estremamente improbabile...), perchè in questo caso le scritte mi vengono sovrapposte.

    //mostra le zone attivate

    lcd.setCursor(0, 2);    
    if(sensore_1==0) {
    lcd.print( "Cantina " );
    }
    else
    lcd.print("");

    if(sensore_2==0) {
    lcd.print( "Casa " );
    }
    else
    lcd.print("");
    
    if(sensore_3==0) {
    lcd.print( "Garage " );
    }
    else
    lcd.print("");
    
    if(sensore_4==0) {
    lcd.print( "Tetto " );
    }
    else
    lcd.print("");
    
    if(sensore_5==0) {
    lcd.print( "Porta " );
    }
    else
    lcd.print("");

lorenzo_1971:
Si esatto, possono valere solo 1 o 0

Questo è il codice che ho pensato per far apparire sul display le "zone" in allarme.
Si presenterebbe solo un problema nel caso in cui si attivino contemporaneamente tutti e cinque i sensori (caso estremamente improbabile...), perchè in questo caso le scritte mi vengono sovrapposte.

    //mostra le zone attivate

lcd.setCursor(0, 2);   
    if(sensore_1==0) {
    lcd.print( "Cantina " );
    }
    else
    lcd.print("");

if(sensore_2==0) {
    lcd.print( "Casa " );
    }
    else
    lcd.print("");
   
    if(sensore_3==0) {
    lcd.print( "Garage " );
    }
    else
    lcd.print("");
   
    if(sensore_4==0) {
    lcd.print( "Tetto " );
    }
    else
    lcd.print("");
   
    if(sensore_5==0) {
    lcd.print( "Porta " );
    }
    else
    lcd.print("");

Secondo me puoi fre a meno dei vari rami else con la print della stringa vuota.