Display scritte strane

Il problema è appunto il display, poichè riporta delle scritte strane e non riesco a capire il perchè.
(per scritte strane intendo simboli e numeri che non c’entrano nulla).
Grazie per l’eventuale aiuto…

Il programma si basa su 3 stanze con 3 pulsanti e 3 led ( ciascuna)
alla pressione del primo pulsante si accendono due led, idem per il secondo; per il terzo invece si annulla la ‘‘chiamata’’.

int ledRedSTANZA1 = 10;                              // ledRed assegnato al pin 9 
int ledRedSTANZA12 = 9;
int ledRedSTANZA13 = 8;
int pulsinterruzioneST1 = 7;                 // pulsante1 assegnato al pin 7  
int pulschiamataST1 = 6;                     // pulsante2 assegnato al pin 6  
int pulschiamataST12= 13;                    // pulsante3 assegnato al pin 10  
int statoSTANZA1=0;
int buzzerSTANZA1 = 50 ;                             // buzzer assegnato al pin 13;

int pulsinterruzioneST2 = 22;    
int pulschiamataST2 = 23;   
int pulschiamataST21= 24;
int ledRedSTANZA2= 25;
int ledRedSTANZA21= 26;
int ledRedSTANZA22= 27;
int buzzerSTANZA2= 51;
int statoSTANZA2=0;


int pulsinterruzioneST3 = 28;    
int pulschiamataST3 = 29;   
int pulschiamataST31= 30;
int ledRedSTANZA3= 31;
int ledRedSTANZA31= 32;
int ledRedSTANZA32= 33;
int buzzerSTANZA3= 52;
int statoSTANZA3=0;




int buzzerINCENDIO =53;
int statoINCENDIO=0; 
int ledVerdeINCENDIO = 34;
int ledVerdeINCENDIO1 = 35;
int ledVerdeINCENDIO2 = 36;
int ledVerdeINCENDIO3 = 37;  
int pulsINCENDIO= 38 ;



#include <LiquidCrystal.h>                    
LiquidCrystal lcd( 12, 11, 5, 4, 3, 2);   // ogni pin ha il suo rispettivo collegamento al display

void setup(){   // setto le variabili
lcd.begin(16,2);     // 16 sono i caratteri , 2 le righe.

pinMode(ledRedSTANZA1,OUTPUT);                        // ledRed assegnato come uscita    
pinMode(ledRedSTANZA12,OUTPUT);                         // ledYw assegnato come uscita
pinMode(ledRedSTANZA13,OUTPUT);
pinMode(ledRedSTANZA2,OUTPUT);
pinMode(ledRedSTANZA21,OUTPUT);
pinMode(ledRedSTANZA22,OUTPUT);
pinMode(ledRedSTANZA3,OUTPUT);
pinMode(ledRedSTANZA31,OUTPUT);
pinMode(ledRedSTANZA32,OUTPUT);

pinMode(pulsinterruzioneST1,INPUT);            // pulsinterruzioneST1 assegnato come ingresso
pinMode(pulschiamataST1,INPUT);                // pulschiamataST1 assegnato come ingresso
pinMode(pulschiamataST12,INPUT);               // pulschiamataST12 assegnato come ingresso
pinMode(pulsinterruzioneST2,INPUT);
pinMode(pulschiamataST2,INPUT);
pinMode(pulschiamataST21,INPUT);
pinMode(pulsinterruzioneST3,INPUT);
pinMode(pulschiamataST3,INPUT);
pinMode(pulschiamataST31,INPUT);

pinMode(buzzerSTANZA1,OUTPUT);
pinMode(buzzerSTANZA2,OUTPUT);                        // buzzer assegnato come uscita
pinMode(buzzerSTANZA3,OUTPUT);

pinMode(pulsINCENDIO,INPUT);                   // pulsINCENDIO assegnato come ingresso
pinMode(buzzerINCENDIO,OUTPUT);                // buzzerINCENDIO assegnato come uscita
pinMode(ledVerdeINCENDIO,OUTPUT);
pinMode(ledVerdeINCENDIO1,OUTPUT);
pinMode(ledVerdeINCENDIO2,OUTPUT);
pinMode(ledVerdeINCENDIO3,OUTPUT);
}

void loop(){        // ciclo da svolgere all'infinito

if (statoSTANZA1 == 0){         // se lo stato è 0 (pulsante1 premuto)
noTone(buzzerSTANZA1);                // il buzzer non emette nessun suono
digitalWrite(ledRedSTANZA12,LOW);      // ledRed spento
digitalWrite(ledRedSTANZA1,LOW);       // ledYw spento
digitalWrite(ledRedSTANZA13,LOW);
lcd.display();                  
lcd.clear();
lcd.print("Interruzione");      // scrivi sopra al display interruzione Stanza1
lcd.setCursor(0,1);             
lcd.print("Stanza 1");         

}

if (statoSTANZA1 == 1 ){            // se lo stato è 1 (puls2 premuto)
  tone(buzzerSTANZA1,450,200);       // emetti un suono di frequenza 450,200
digitalWrite(ledRedSTANZA1,HIGH);    // ledRed acceso
digitalWrite(ledRedSTANZA12,HIGH);     // ledYw acceso
lcd.display();
lcd.clear();
lcd.print("Chiamata");        // scrivi sopra al display chiamata Staanza1
lcd.setCursor(12,1);
lcd.print("Stanza 1");
  
}

if (statoSTANZA1==2){                             // se lo stato è 2 (puls3 premuto)
 tone(buzzerSTANZA1,450,200);            // emette un suono differente di frequenza 600,400
digitalWrite(ledRedSTANZA13,HIGH);    // ledRed acceso
digitalWrite(ledRedSTANZA1,HIGH);     // ledYw acceso
lcd.display();
lcd.clear();
lcd.print("Chiamata");        // scrivi sopra al display chiamata Staanza1
lcd.setCursor(12,1);
lcd.print("Stanza 1");    
}

// STANZA 2


if (statoSTANZA2==0){
noTone(buzzerSTANZA2);                // il buzzer non emette nessun suono
digitalWrite(ledRedSTANZA2,LOW);      // ledRed spento
digitalWrite(ledRedSTANZA21,LOW);       // ledYw spento
digitalWrite(ledRedSTANZA22,LOW);
lcd.display();                  
lcd.clear();
lcd.print("Interruzione");      // scrivi sopra al display interruzione Stanza1
lcd.setCursor(0,1);             
lcd.print("Stanza 2");    
}

if (statoSTANZA2==1){
tone(buzzerSTANZA2,450,200);       // emetti un suono di frequenza 450,200
digitalWrite(ledRedSTANZA2,HIGH);    // ledRed acceso
digitalWrite(ledRedSTANZA21,HIGH);     // ledYw acceso
lcd.display();
lcd.clear();
lcd.print("Chiamata");        // scrivi sopra al display chiamata Staanza1
lcd.setCursor(12,1);
lcd.print("Stanza 2");
  
}

if (statoSTANZA2==2){
tone(buzzerSTANZA2,450,200);       // emetti un suono di frequenza 450,200
digitalWrite(ledRedSTANZA2,HIGH);    // ledRed acceso
digitalWrite(ledRedSTANZA22,HIGH);     // ledYw acceso
lcd.display();
lcd.clear();
lcd.print("Chiamata");        // scrivi sopra al display chiamata Staanza1
lcd.setCursor(12,1);
lcd.print("Stanza 2");
}

// STANZA 3 

if (statoSTANZA3==0){
noTone(buzzerSTANZA3);                // il buzzer non emette nessun suono
digitalWrite(ledRedSTANZA3,LOW);      // ledRed spento
digitalWrite(ledRedSTANZA31,LOW);       // ledYw spento
digitalWrite(ledRedSTANZA32,LOW);
lcd.display();                  
lcd.clear();
lcd.print("Interruzione");      // scrivi sopra al display interruzione Stanza1
lcd.setCursor(0,1);             
lcd.print("Stanza 3");    
}

if (statoSTANZA3==1){
tone(buzzerSTANZA3,450,200);       // emetti un suono di frequenza 450,200
digitalWrite(ledRedSTANZA3,HIGH);    // ledRed acceso
digitalWrite(ledRedSTANZA31,HIGH);     // ledYw acceso
lcd.display();
lcd.clear();
lcd.print("Chiamata");        // scrivi sopra al display chiamata Staanza1
lcd.setCursor(12,1);
lcd.print("Stanza 3");
  
}

if (statoSTANZA3==2){
tone(buzzerSTANZA3,450,200);       // emetti un suono di frequenza 450,200
digitalWrite(ledRedSTANZA3,HIGH);    // ledRed acceso
digitalWrite(ledRedSTANZA32,HIGH);     // ledYw acceso
lcd.display();
lcd.clear();
lcd.print("Chiamata");        // scrivi sopra al display chiamata Staanza1
lcd.setCursor(12,1);
lcd.print("Stanza 3");
}

// ALLARME INCENDIO

if (statoINCENDIO==0) {
  tone ( buzzerINCENDIO,600,400);
  digitalWrite (ledVerdeINCENDIO,HIGH);
  delay(300);
  digitalWrite(ledVerdeINCENDIO1,HIGH);
  delay(300);
  digitalWrite(ledVerdeINCENDIO2,HIGH);
  delay(300);
  digitalWrite(ledVerdeINCENDIO3,HIGH);
  
 }


// STANZA 1 CICLO IF

if(digitalRead(pulsinterruzioneST1)==HIGH){        
  statoSTANZA1=0;                           

}

if (digitalRead(pulschiamataST1)==HIGH){      
  statoSTANZA1=1;                          
}

if (digitalRead(pulschiamataST12)==HIGH){       
  statoSTANZA1=2;                          
}


// STANZA 2 CICLO IF


if(digitalRead(pulsinterruzioneST2)==HIGH){        
  statoSTANZA2=0;                           

}

if (digitalRead(pulschiamataST2)==HIGH){      
  statoSTANZA2=1;                          
}

if (digitalRead(pulschiamataST21)==HIGH){       
  statoSTANZA2=2;                           
}


// STANZA 3 CICLO IF

if(digitalRead(pulsinterruzioneST3)==HIGH){        
  statoSTANZA3=0;                           

}

if (digitalRead(pulschiamataST3)==HIGH){      
  statoSTANZA3=1;                          
}

if (digitalRead(pulschiamataST31)==HIGH){        
  statoSTANZA3=2;                           
}


// ALLARME INCENDIO

if (digitalRead(pulsINCENDIO)==HIGH){
  statoINCENDIO=0;
  
}

}

azzardo un ipotesi.... sicuro che i pin sono collegati correttamente dall'lcd ad arduino?

-zef-: azzardo un ipotesi.... sicuro che i pin sono collegati correttamente dall'lcd ad arduino?

Verificato, sono spariti i geroglifici ma ora non compare la scritta bensì solo i quadratini (per altro solo su una riga,invece che su due) Mi spiego meglio: I quadratini dovrebbero comparire su due righe mentre compare solo su una riga,mentre delle scritte che dovrebbero comparire non c'è ne traccia. Controllato più volte i collegamenti son tutti giusti,secondo voi cosa può essere? Forse come dici tu zef devo collegare meglio i cavetti,perché andando ad avvicinare un po' il dito (essendo che i cavetti non entrano del tutto) il display è come se avesse delle interferenze...

Oltre a riverificare la bontà dei contatti
ricorda di mettere a gnd il pin 5 r\w del
display.

Verificato collegamenti e tutto quello che succede è questo: Con una sola stanza (quindi il programma che riguarda solo una stanza) non si presentanto errori di strane lettere ma solo un fastidioso sfarfallio del numero ( che indica la stanza).

Con il programma per intero certe volte compaiono appunto lettere e numero strani e certe volte invece va perfettamente senza neanche nessun effetto flicker ( in questo caso la prova è stata effettuata sempre con già tutti i collegamenti predisposti)

Ora vorrei sapere se qualcuno può darmi una mano a risalire appunto a questi due problemi. Grazie per l'attenzione.

Stilita: Oltre a riverificare la bontà dei contatti ricorda di mettere a gnd il pin 5 r\w del display.

Ma il pin5 non va collegato a d4 ed RW al gnd?

da una rapida occhiata al listato ho notato che usi spesso lcd.dispaly, che da quanto vedo sul reference serve per riattivare l'lcd dopo che è stato spento con noDisplay, ma questo comando non lo hai mai usato quindi presumo che puoi togliere anche tutti gli lcd.display.

Altra cosa, finché lo stato di un pulsante non cambia al display viene ugualmente inviato lcd.clear e poi di visualizzare le stesse scritte, in questo modo un rapido cancellare l'lcd e riscrivere ti causa sfarfallio, dovresti fare in modo che l'lcd visualizza solo le cose che cambiano di volta in volta sovrascrivendo le scritte vecchie.

Ho risolto zef, grazie.
Vorrei approfittare per chiederti/vi quando hai/avete due minuti di controllare il programma che ho postato per vedere se ci fosse qualche errore,grazie.
(Il programma è sempre quello).