Buonasera a tutti voi.
Ho un problema con un mio sketch riguardante la scrittura di due righe su un display LCD 16*2 gestito dalla libreria <LiquidCrystal.h>
Tramite un programma, da PC invio in seriale una stringa nel formato "Nome\nCognome".
Ingenuamente speravo che il \n il display lo interpretasse come "vai a capo", cosa invece non vera
Ora, ho provato in tutti i modi di andare a capo: tramite caratteri speciali da interpretare da lato Arduino, ma niente... o ricevo errori, oppure sul display non compare nulla....
Lato arduino potresti verificare la presenza di "/n" nella stringa ricevuta da seriale (o qualunque altro carattere tu voglia), in caso affermativo esegui un lcd.setCursor(0, 1); che equivale ad andare a capo.
Allora, il metodo setCursor() è inutile se non faccio in modo di cercare il carattere speciale, cosa che non riesco a fare perchè l'oggetto String non è supportato dalle librerie LiquidCrystal.h
Quindi lo sketch:
String nome
while(Serial.available() > 0)
{
nome =+ Serial.read();
}
lcd.print(nome); //oppure lcd.write(nome)
delay(2500);
lcd.clear();
}
o mi da errore in fase di compilazione o non scrive nulla sul display.
Ho provato anche ad acquisire i dati in array di caratteri con il controllo:
char carattere[1];
while(Serial.available() > 0)
{
carattere[0] = Serial.read();
if (carattere[0] == "@") //@ è il mio carattere personalizzato per andare a capo
lcd.setCursor(1,0)
else
lcd.print(carattere[0]);
}
delay(2500);
lcd.clear();
}
Chiudo con una domanda
se dovessi dichiarare una variabile all'interno di un ciclo o di un blocco if, la stessa verrebbe disallocata al termine del ciclo o al termine del programma?
La variabile sará valida nella funzione finche non esci, oppure la dichiari static, allora c'é anche alla sucessuva chiamata della funzione. http://arduino.cc/en/Reference/Static
ilPeppins:
Purtroppo mi hanno sempre detto, professori compresi, che in C non ci fosse differenza tra " e '....
Non ci posso credere...
se dovessi dichiarare una variabile all'interno di un ciclo o di un blocco if, la stessa verrebbe disallocata al termine del ciclo o al termine del programma?
Parliamo di "blocco di codice".
Qualunque gruppo di righe di codice racchiuso fra le parentesi graffe è un blocco di codice, e la visibilità di una variabile dichiarata dentro uno di questi blocchi è limitata al blocco stesso. La variabile verrà distrutta all'uscita dal blocco.
Ad esempio, nel for la variabile che usi come indice, se la dichiari nel for stesso avrà visibilità solo all'interno del for.
Esempio:
byte i;
byte x = 0;
for (i = 0; i++; i <10) {
x++;
}
i++;
In questo caso, i è dichiarata fuori dal for e quindi la sua visibilità si estende al blocco superiore, che può essere un altro blocco di codice come uno switch.. case oppure anche il corpo di una funzione.
Invece
byte x = 0;
for (byte i = 0; i++; i <10) {
x++;
}
i++;
Qui avrai un errore perché i era stata dichiarata nel for e la potevi vedere solo nel blocco del for.
Ancora un caso:
byte i;
byte x = 0;
for (byte i = 0; i++; i <10) {
x++;
}
i++;
In questo caso la i dichiarata nel for NON è la stessa i dichiarata al suo esterno, la i del for nasconde la visibilità della i dichiarata fuori dal for. Anche se hanno lo stesso nome, sono 2 variabili diverse