Nel primo esercizio della lezione: Arduino: Stepper 28BYJ-48 – AccelStepper library veniva chiesto di impostare i parametri di azionamento del motore passo paso da Serial Monitor, questa operazione può essere svolta usando la classe toInt(), ma in modo più efficace e semplice possiamo usare la classe parseInt(). In questa breve lezione un esempio di controllo del lampeggio di un LED da Serial Monitor mediante l’uso di parseInt().
È possibile ricevere numeri con più di una cifra utilizzando i metodi parseInt e parseFloat che semplificano l’estrazione di valori numerici da seriale. (Funziona anche con Ethernet e altri oggetti derivati dalla classe Stream)
Serial.parseInt() e Serial.parseFloat() leggono i caratteri seriali e restituiscono la loro rappresentazione numerica.
I caratteri non numerici prima del numero vengono ignorati e il numero termina con il primo carattere che non è una cifra numerica (o “.” Se si utilizza parseFloat). Se non ci sono caratteri numerici nell’input, le funzioni restituiscono 0, quindi bisogna controllare i valori zero e gestirli in modo appropriato.
Nel dettaglio
- I caratteri iniziali che non sono cifre o sono numeri negativi vengono ignorati;
- L’analisi si interrompe quando non sono stati letti caratteri per un valore di tempo di timeout che può essere configurato oppure viene letta una non cifra;
- Se non sono state lette cifre valide quando si verifica il timeout (vedere Serial.setTimeout ()), viene restituito 0; Serial.parseInt () eredita dalla classe Stream.
Se avete la Serial Monitor configurata per inviare una nuova riga o un ritorno a capo (o entrambi) quando fate clic su invia, parseInt o parseFloat proveranno ad interpretare il return come numero, ma poiché il ritorno a capo non è un numero il valore restituito da parseInt o parseFloat sarà zero.
Nell’esempio che segue un invio imposta blinkRitardo a zero il che implica che il LED non lampeggia.
// Prof. Maffucci Michele
// 10.11.2020
// Impostazione del delay del Blink da tastiera
int lampeggioRitardo = 0;
int chiave = 0;
void setup()
{
Serial.begin(9600); // inizializzazione della serial monitor
pinMode(LED_BUILTIN, OUTPUT); // imposta il pin come output
}
void loop()
{
// ritardo per evitare una doppia scrittura
// della prima stampa a monitor
delay(1000);
// consente di visualizzare sulla Serial Monitor
// una sola stampa delle stringa
if (chiave == 0) {
Serial.print("Inserisci il ritardo in millisecondi: ");
chiave = 1;
}
// Controlla se è disponibile almeno un carattere sulla seriale
// La Serial.available() restituisce
// 1 se presente un cattere,
// 0 se non è presente un carattere
if (Serial.available())
{
int r = Serial.parseInt(); // in r viene memorizzato il valore inserito in numero
if (r != 0) {
lampeggioRitardo = r;
Serial.println(lampeggioRitardo);
// abilita alla stampa di una nuova stringa:
// "Inserisci il ritardo in millisecondi: "
chiave = 0;
}
}
lampeggio(); // funzione che fa lampeggiare il LED su Arduino
}
// il LED lampeggia con i tempi di
// accensione e spegnimento determinati da lampeggioRitardo
void lampeggio()
{
digitalWrite(LED_BUILTIN, HIGH);
delay(lampeggioRitardo); // il delay dipende dal valore in lampeggioRitardo
digitalWrite(LED_BUILTIN, LOW);
delay(lampeggioRitardo);
}
Esercizio 1
Dato un LED RGB connesso ad Arduino, realizzare un selettore che da Serial Monitor consente di controllare l’accensione e lo spegnimento del rosso, del verde e del blu
Esercizio 2
Svolgere l’esercizio 1 della lezione Stepper 28BYJ-48 – AccelStepper library usando la parseInt()
