Programmare con Arduino – leggere un segnale digitale

Continuo la mia serie di articoli sulle basi della programmazione con Arduino prendendo spunto da questo articolo direttamente presente sul sito Arduino, che cosa aggiungo la mia personale spiegazione passo passo del codice e qualche consiglio …

Innanzitutto ecco lo schema dei collegamenti:

Arduino Button example
Arduino Button example

non ho ancora capito con quale programma il team di arduino faccia questi schemi ma sono davvero chiari e ben fatti, ottimo lavoro come al solito.
Tornando allo scopo dell’articolo introduciamo una cosa simpatica: la lista della spesa !!!

  1. una scheda Arduino
  2. una breadboard
  3. un interruttore a pulsante ( normalemente aperto )
  4. una resistenza da 10K
  5. degli spezzoni di filo da utilizzare per i collegamenti

Per assemblare l’esperimento possiamo seguire il disegno, avendo cura di connettere la resistenza da 10K come resistenza di pull-down ( pressione del bottone ) ossia la resistenza ha lo scopo di non far andare in corto circuito Arduino quando premiamo il pulsante.

L’altro contatto del bottone lo abbiamo colegato al pin 2 di Arduino che andremo a leggere con il nostro sketch.
Il pin 2 non è stato scelto a caso, non siamo partiti dal pin 0 o 1 in quanto questi 2 pin sono riservat da Arduino rispettivamente come Rx e Tx seriali.

Lo sketch che utilizzeremo è molto semplice, ma il mio scopo è chiarire concetti semplici per poi unirli in un progetto più complesso, se impari i rudimenti e le cose semplici sarà più immediata l’applicazione a realizzazioni complesse:

/*
 DigitalReadSerial
 Reads a digital input on pin 2,
 prints the result to the serial monitor

 This example code is in the public domain.
 */

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);
}

void loop() {
  int sensorValue = digitalRead(2);
  Serial.println(sensorValue, DEC);
}

Lo sketch presentato inizia con il consueto commento multilinea in cui è possibile distinguere lo scopo del programma e la possibilità di utilizzarlo liberamente.
linee 1-7: commentoo multilinea
linea 9: dichiaro la funzione setup(), come hai già visto in altri sketch è fondamentale per Arduino, serve a settare tutti i valori di partenza, una vera e propria inizializzazione del programma

linea 10: utilizzando il comnado begin( 9600 ) dell’oggetto Serial comunico ad Arduino che voglio utilizzare il suo canale di comunicazione seriale, potrò scrivere informazioni sul monitor del computer o leggere degli input attraverso questo canale, ma queste operazioni le vedremo al tempo dovuto, per adesso l’importante è che tu sappia che Serial.begin(9600) apre un canale di comunicazione seriale a 9600 boud tra Arduino ed il computer

linea 11: ritrovi il comando più gettonato pinMode(2,INPUT) che imposta il pin 2 come INPUT, ossia abilita la ricezione di informazioni provenieti da questo pin, essendo il pin 2 un pin di tipo digitale i seganli che dovrai aspettarti di ricevere sono di tipo digitale ( 0 e 1 )

linea 14: dichiaro la funzione loop(), che questa una vecchia conoscenza, vedi tutorial precedenti

linea 15: in questa linea trovi più concetti raggruppati, in programmazione questo genere di sintassi si traduce come compressione del codice o ottimizzazione del codice, si utilizza per ridurre le liee di codice accorpando più comandi su di una sola linea; potrei scrivere la sola linea 15 come le seguenti linee:
int sensorValue;   // inizializzo una variabile non ancora dichiarata sensorValue in cui memorizzerò il valore letto dal pin 2
sensorValue = digitalRead(2); // con il comando digitalRead(2) leggo il valore del pin 2 ad ogni ciclo del loop() e assegno tale valore alla variabile sensorValue dichiarata sopra. Anche scritta nella forma monolinea il significato non cambia, ho solo risparmiato spazio e ottimizzato il codice

linea 16: il valore che ho raccolto deve servirmi a qualcosa, ad esempio scrivendo tale valore sulla seriale di comunicazione con il computer; per farlo riprendo il mio oggetto Serial e ne utilizzo il metodo println(sensorValue, DEC) in particolare il comando println (print line) scrive il valore contenuto nella variabile sensorValue sul monitor seriale di Arduino andando a capo ad ogni scrittura, ho aggiunto che un seondo parametro DEC che consente al println di convertire il valore letto in formato DECIMALE comprensibile.

Trasferiemo il nostro Sketch sulla scheda e aprimo il monitor seriale:  serial monitor

In condizione normale, pulsante non premuto, vedremo scorrere sul monitor serale una sequenza di 0, alla pressione del pulsante vedremo il valore printato variare da 0 a 1, rilasciando il pulsante il valore varia da 1 a 0.

Ora può sembrare inutile questo esempio tuttavia hai iniziato a prendere confidenza con il monitor seriale, utilissimo per il debug dei tuoi sketch e con la lettura di un valore digitale, ad esempio un finecorsa di un motore stepper (passo-passo) o un interruttore a leva inserito difronte ad un robot che la contatto con un oggetto inverte la marcia e tantissimi altri utlizzi.

Buona sperimentazione.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/programmare-con-arduino-leggere-un-segnale-digitale.html

50 pings

Skip to comment form

  1. […] dall muro e girare prima di toccarlo in opposizione a quanto visto nell’articolo dedicato al segnale digitale in cui l’ipotetico robot avrebbe dovuto sbatterci contro il muro per accorgersi […]

  2. […] Programmare con Arduino – leggere un segnale diditale […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.