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()