Lezione 2
Quando create un nuovo sketch potete notare che ci sono gia' delle istruzioni scritte. Si tratta delle due funzioni principali contenute in qualsiasi sketch:
In sostanza, tutto cio' che si trova al di fuori di void loop() e di una funzione in generale viene eseguito una sola volta. Le istruzioni vanno racchiuse tra le parentesi graffe {}. |
Ecco il semplicissimo programma che abbiamo caricato sulla scheda la scorsa volta la cui funzione e' quella di far lampeggiare un diodo LED collegato sul pin digitale numero 2, le istruzioni sono commentate in inglese dato che ho il sistema appunto in inglese, spero che riusciate a capire. Nella parte superiore con l'istruzione #define LED 2 viene definito il PIN utilizzato dal diodo LED ed assegnato ad esso un nome. Quindi, una volta assegnato possiamo chiamarlo con il nome che gli abbiamo dato, in questo caso LED.
|
Nella funzione void setup() c'e' il comando pinMode che serve a definire il comportamento di tale pin, questa funzione puo' essere:
Per attivare la resistenza interna di Pull-up.
Quindi scriviamo pinMode(nomedelpin, I/O). Nella funzione loop viene utilizzata l'istruzione digitalWrite(nomedelpin, stato); con la quale poniamo la porta digitale 2 chiamata LED sullo stato logico HIGH in modo da accendere il LED. Con lo stato logico HIGH usciranno 5v dalla porta, con quello LOW invece 0v. Ci sono vari tipi di interazioni con i pin sia analogici che digitali:
L'istruzione delay(tempo); serve a creare un ritardo nel programma, la variabile tempo e' espressa in millisecondi quindi delay(1000); serve per aspettare 1 secondo per poi passare all'esecuzione dell'istruzione successiva. Nella funzione loop quindi il led viene acceso e spento con un intervallo di 1 secondo, in questo modo lampeggiera'.
Provate ora a:
- pinMode(nomedelpin, OUTPUT); se il pin deve funzionare come OUTPUT quindi se dobbiamo attivare un attuatore.
- pinMode(nomedelpin, INPUT); se il pin deve funzionare come INPUT quindi se dobbiamo ricevere da un sensore.
- pinMode(nomedelpin, INPUT_PULLUP); se il pin deve funzionare come INPUT e con la resistenza di Pull-up attiva (il microcontrollore al suo interno su ogni porta ha una resistenza da ~20KOhm), questo significa che HIGH ha valore LOW e viceversa quindi in sostanza gli stati logici vengono invertiti. Questo comando e' possibile utilizzarlo in versioni dell'IDE superiori alla 1.0.1. In quelle precenti e' possibile scrivere:
pinMode(pin,INPUT);
digitalWrite(pin, HIGH);
Per attivare la resistenza interna di Pull-up.
Quindi scriviamo pinMode(nomedelpin, I/O). Nella funzione loop viene utilizzata l'istruzione digitalWrite(nomedelpin, stato); con la quale poniamo la porta digitale 2 chiamata LED sullo stato logico HIGH in modo da accendere il LED. Con lo stato logico HIGH usciranno 5v dalla porta, con quello LOW invece 0v. Ci sono vari tipi di interazioni con i pin sia analogici che digitali:
- digitalWrite(nomedelpin, valore); in questo modo scriviamo sul pin scelto un valore a nostra preferenza, esso puo' essere HIGH, LOW oppure un numero da 0 a 255 per utilizzare la tecnica PWM (disponibile solo su determinati pin).
- digitalRead(nomedelpin); in questo modo leggiamo il valore dal pin scelto. Dato che e' digital il valore puo' assumere solo 0 oppure 1.
- analogWrite(nomedelpin, valore); come per digitalWrite, scegliamo un pin e scriviamo un valore a nostra scelta.
- analogRead(nomedelpin); A differenza del digitalRead, con analogRead siamo in grado di leggere valori al di fuori di 0 e 1.
L'istruzione delay(tempo); serve a creare un ritardo nel programma, la variabile tempo e' espressa in millisecondi quindi delay(1000); serve per aspettare 1 secondo per poi passare all'esecuzione dell'istruzione successiva. Nella funzione loop quindi il led viene acceso e spento con un intervallo di 1 secondo, in questo modo lampeggiera'.
Provate ora a:
- Variare la frequenza del lampeggio del LED.
- Lasciare il LED acceso/spento.
- Accendere il led con un tempo diverso da quello di spegnimento e viceversa.
- Accendere e spegnere il LED con un tempo inferiore a 500ms e renderlo via via piu' breve.