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 
lcd.print( (sensore_2 ? "acceso" : "spento") );
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.