ho fatto un programma che accende un LED se viene digitato 1 e lo spegne se si digita 0 altrimenti se si digita un'altro carattere dice comando errato, i comandi li passo ad arduino tramite il serial monitor della IDE di arduino per ora.
il programma funziona, nel senso che se do 1 si accende e se do 0 si spegne però guardando nel serain monitor ad esempio premo 1 mi dice:
LED acceso
comando errato
comando errato
e lo stesso se premo 0 (solo al posto di darmi LED acceso dice LED spento)
questo è il sorgente del programma
#define LED 13 // led connesso al pin 13
int cmd = 0; // variabile per contenere il carattere ricevuto
void setup() {
Serial.begin(9600); // imposto la UART per lavorare a 9600
pinMode(LED, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
Serial.flush(); // svuoto il buffer di ricezione seriale
}
void loop() {
// Controllo se il buffer di ricezione contiene qualcosa
if (Serial.available() > 0) {
cmd = Serial.read(); // leggo il carattere ricevuto e lo memorizzo in rx
Serial.flush(); // svuoto il buffer di ricezione seriale
// se il comando è 0
if (cmd == '0') {
Serial.print(cmd); //stampo il valore di cmd
// controlloa se il LED era acceso
if (digitalRead(LED) == HIGH) {
digitalWrite(LED, LOW); // spengo il LED
Serial.println("LED spento"); // scrivo nella seriale "LED Spento"
}
// se il led era spento
else
Serial.println("Il LED e' gia spento, forse volevi accenderlo?? premi <1> per accendere il LED");
}
//se il comando è 1
if (cmd == '1') {
Serial.print(cmd); //stampo il valore di cmd
//controllo se il LED era spento
if (digitalRead(LED) == LOW) {
digitalWrite(LED, HIGH); //accendo il LED
Serial.println("LED acceso"); //scrivo nella seriale "LED acceso"
}
else
Serial.println("Il LED e' gia acceso, forse volevi spegnerlo?? premi <0> per spegnere il LED");
}
//se il comando non è ne 0 ne 1
else {
Serial.print(cmd);
Serial.println("Comando errato! premere <1> per accendere il LED e <0> per spegnerlo");
}
}
}
questo è quello che restituisce nel serial monitor
49LED acceso
13Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
10Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
49Il LED e' gia acceso, forse volevi spegnerlo?? premi <0> per spegnere il LED
13Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
10Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
48LED spento
48Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
13Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
10Comando errato! premere <1> per accendere il LED e <0> per spegnerlo
guardando nella tabella del codice ASCII il 13 corrisponde a "carriage return" e il 10 a "linee feed"
una domanda cosa cambia se lavoro con UART a 9600, 4800 o ad un altro valore??