Quando da PC si inviano dati ad Arduino attraverso un protocollo di comunicazione seriale, pur digitando nel monitor seriale un'intera frase tipo "accendi il dispositivo" (attenzione alle maiuscole/minuscole se presenti), questa viene trasmessa ad Arduino un carattere per volta (trattandosi di comunicazione appunto seriale) e quindi ogni carattere risulta slegato dal precedente ed dal successivo. Occorre quindi utilizzare una variabile inizialmente vuota, che denominiamo ad esempio 'testo', di tipo stringa (adatta a contenere una sequenza di caratteri alfanumerici), e l'istruzione 'while', che vuol dire 'mentre'
Mentre Arduino non riceve dati dalla porta seriale si mette in uno stato di attesa ({} equivale a dire non eseguire nulla)
while (Serial.available() == 0) { }
Invece, mentre riceve dati dalla porta seriale, i singoli caratteri ricevuti di una frase vanno ad aggiungersi in coda a quelli già contenuti nella stringa 'testo'; fino al completamento della frase (non arrivano più caratteri dalla seriale).
testo = "";
while (Serial.available()>0) {
lettera = Serial.read();
testo += lettera;
delay(2);
}
Quindi inseriamo le seguenti istruzioni nell'IDE di Arduino e carichiamole sulla scheda.
Inserendo nel monitor seriale dell'IDE la seguente frase "Ciao, questa è una frase" e premendo il tasto "Invio", l'IDE invierà in maniera seriale (uno per volta) tutti i caratteri della frase, Arduino li riceve uno per volta e li assembla in un'unica stringa contenuta nella variabile 'testo' che viene inviata al PC e visualizzata nel monitor seriale dell'IDE.
l'istruzione
testo += lettera;
dice ad Arduino di aggiungere in coda alla stringa già contenuta in 'testo' il carattere contenuto in 'lettera'.
Quando, trasmessa l'intera frase, dalla seriale non arriveranno più dati, e ciò vuol dire che la frase contenuta nella variabile 'testo' è completa e quindi possiamo andare a verificare tramite l'istruzione 'if' se contiene la frase "accendi il dispositivo" per imporre l'accensione del Led, oppure "spegni il dispositivo" per spegnerlo.
Rileggere con attenzione il seguente sketch e caricarlo sulla scheda:
Fare attenzione a digitare nel Monitor seriale in maniera esatta la frase, perché un solo carattere scritto in maniera diversa non determinerà l'accensione/spegnimento del Led.
Non dimenticare inoltre che la stringa può contenere circa 300 caratteri.
AGGIORNAMENTO
L'Intelligenza Artificiale di Google Bard, interrogata in merito ad un problema analogo, ha però trovato delle istruzioni più rapide per memorizzare in una stringa le frasi provenienti dal monitor seriale. Eccole:
String testo;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
// Leggo la stringa da seriale
testo = Serial.readString();
Serial.println("la frase proveniente dalla seriale è: " + testo);
}
}
Si tenga però presente che con questa modalità di ricezione di stringhe dal monitor seriale, unitamente alla frase digitata sarà memorizzata nella variabile testo anche "\n" corrispondente ad andare accapo. Quindi servirà inserire nello sketch questa istruzione di controllo:
if (testo == "accendi il dispositivo\n")
in sostituzione di:
if (testo == "accendi il dispositivo")
Questo il codice aggiornato con la nuova istruzione serial.readString();
Per esercitarsi effettuare le seguenti modifiche:
nel codice cambiare a piacere la frase richiesta per accendere o spegnere il led verificando che le lettere maiuscole vengono interpretate in maniera diversa da quelle minuscole
utilizzando il comando switch ... case usato nel progetto precedente, in sostituzione degli if, inserire un'altra frase che fa lampeggiare il led per 10 volte, tipo "fai lampeggiare il led".
Nel prossimo progetto piloteremo il Led digitando la frase sul nostro smartphone.