Arduino/facciamo lampeggiare un led

Da PNLUG.


Gestire l'ouput usando un led

#define LUCCIOLA 13


Perché TREDICI?
Questa è la prima istruzione che ogni principiante apprende nei primissi approcci con Arduino.

LUCCIOLA è un nome di fantasia. Maiuscolo per caratterizzare visivamente le costanti (convenzione).
13 è un numero che corrisponde ad uno dei canali fisici di input di Arduino.
Dunque esiste davvero. Se arduino fosse stato progettato con dodici pin di input/ouput digitale, il nostro programma sarebbe sbagliato.

Noi, seguendo le guide ufficiali degli sviluppatori di Arduino, abbiamo incominciato a lavorare in linguaggio C. Non è strettamente indispensabile utilizzare il linguaggio C, per programmare Arduino, ma è necessario usare un linguaggio di programmazione di basso livello, per interfacciarci direttamente con l'hardware, fin dalla prima riga di codice.

 #define LUCCIOLA 13
 
 void setup() {
   pinMode(LUCCIOLA,OUPUT);
 }
 
 void loop() {
  digitalWrite(LUCCIOLA,HIGH);
  delay(1000);
  digitalWrite(LUCCIOLA,LOW);
  delay(1000);
 }

È meraviglioso. Non fosse inglesa, potrebbe capire anche un bambino.
Quasi tutti i termini usati corripondono a chiamate di libreria, cioè a strumenti messi a disposizione dagli sviluppatori di Arduino per semplificare la vita ai propri utenti.

setup è la sezione di preparazione dello sketch. Viene eseguita una volta sola nel momento in cui si carica lo sketch, oppure nel momento in cui si ripristina l'alimentazione a una scheda Arduino sulla quale lo sketch era stato caricato precedentemente. Nel nostro caso serve per definire la funzione del canale 13.

loop è la sezione ciclica, che viene ripetuta sistematicamente dopo il setup, fino allo spegnimento di arduino.

 digitalWrite(LUCCIOLA,HIGH);

I programmi si scrivono, un po' come i testi normali, da sinistra verso destra, e poi vengono inviati al compilatore.
Il compilatore li riceve come le merci sul nastro trasportatore di un supermercato. Da destra verso sinistra:

  1. HIGH è un input: "Cosa voglio scrivere?"
  2. LUCCIOLA è un ouput "Dove lo voglio scrivere?"
  3. digitalWrite() è un processo: "Cosa voglio fare di questo input, verso questo ouput?

Possiamo partire. Anzi no.
Arduino è un oggetto fisico, non serve a nulla programmare, se no è stato preparato l'hardware.
Dobbiamo prepare il led. Un attimo di attenzione. Un led possiede due pin asimmetrici. Uno lungo e uno corto. Quello lungo deve essere collegato al polo positivo, perché i led sono diodi, fisicamente asimmetrici. Collegati a rovescio non emettono luce e possono rovinarsi. La guida suggerisce di interporre anche una resistenza di protezione. Farà diminuire un po' la luminosita e la corrente assorbita, ma in certi casi non è strettamente indispensabile, almeno se si lavora con un solo led.

Eccoci pronti. Apriamo la ide di arduino, cerchiamo l'esempio blink già pronto, clicchiamo sul pulsante per eseguire l'upload...

Anzi no. Se siamo in linux e ci vogliamo attrezzare con arscons, digitiamo semplicemente:

 scons upload

e il gioco è fatto.

Output analogico e output digitale

Tutto finito.
Bé, si. O forse, anche no.

Se vogliamo... programmare significa poterlo cambiare, il programma.
Perchè non proviamo a cambiare i ritardi?

1000 significa 1000 millesimi di secondo. Cioè un secondo.
Un secondo è un tempo lunghissimo.
Arduino controlla i millisecondi. E, volendo, anche i microsendi.

I due ritardi devono per forza essere uguali? Se non lo sono, cosa accade scambiando tra loro i due tempi?
Quando i tempi di attesa sono inferiori ai tempi di riflesso umani, diciamo cioè inferiori ai 20 millisecondi, il led, anzichè accedersi e spegnersi, genera la percezione di una intensità, legata al rapporto tra l'intervallo di accensione e l'intervallo di spegnimento.

Questa percezione è analogica, anche se è stata realizzata con strumenti digitali.
La tecnica di realizzare effetti analogici, utilizzando la velocità degli eleboratori elettronici è un espediente largamente diffuso in informatica. Per quanto riguarda l'intensità luminosa, può essere ottenuta da Arduino sia con un programma come il nostro, sia con una tecnologia intergrata ancora più efficente, chiamata pwm.

Ma questo è fuori dal tema di questa pagina.