Arduino: utilizzo del metodo parseInt() per la conversione di un stringa di testo che rappresenta un numero in un numero

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.

1// Prof. Maffucci Michele
2// 10.11.2020
3// Impostazione del delay del Blink da tastiera
4 
5int lampeggioRitardo = 0;
6int chiave = 0;
7void setup()
8{
9  Serial.begin(9600); // inizializzazione della serial monitor
10  pinMode(LED_BUILTIN, OUTPUT); // imposta il pin come output
11}
12void loop()
13{
14  // ritardo per evitare una doppia scrittura
15  // della prima stampa a monitor
16  delay(1000);
17 
18  // consente di visualizzare sulla Serial Monitor
19  // una sola stampa delle stringa
20  if (chiave == 0) {
21    Serial.print("Inserisci il ritardo in millisecondi: ");
22    chiave = 1;
23  }
24 
25  // Controlla se è disponibile almeno un carattere sulla seriale
26  // La Serial.available() restituisce
27  // 1 se presente un cattere,
28  // 0 se non è presente un carattere
29   
30  if (Serial.available())
31  {
32    int r = Serial.parseInt(); // in r viene memorizzato il valore inserito in numero
33    if (r != 0) {
34      lampeggioRitardo = r;
35      Serial.println(lampeggioRitardo);
36 
37      // abilita alla stampa di una nuova stringa:
38      // "Inserisci il ritardo in millisecondi: "
39      chiave = 0;
40    }
41  }
42  lampeggio(); // funzione che fa lampeggiare il LED su Arduino
43}
44 
45// il LED lampeggia con i tempi di
46// accensione e spegnimento determinati da lampeggioRitardo
47void lampeggio()
48{
49  digitalWrite(LED_BUILTIN, HIGH);
50  delay(lampeggioRitardo); // il delay dipende dal valore in lampeggioRitardo
51  digitalWrite(LED_BUILTIN, LOW);
52  delay(lampeggioRitardo);
53}

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.