domenica 25 aprile 2010

Arduino: primo sketch

Arduino è una piattaforma open source di physical computing basata su una semplice scheda input/output e un ambiente di sviluppo che implementa il linguaggio Processing, assai simile al linguaggio C. Arduino può essere usato per sviluppare oggetti interattivi indipendenti o può essere collegato a un software in esecuzione sul computer. Le schede possono essere assemblate a mano oppure acquistate in rete. In questi giorni è stato aperto il primo store ufficiale a Milano.L'IDE (Integrated Development Environment) open source può essere scaricato gratuitamente da www.arduino.cc. Altre informazioni su Arduino possono essere trovate all'indirizzo già indicato. L'ideatore di Arduino è Massimo Banzi, diffidate dalle tante imitazioni che girano in rete, il vero Arduino è made in Italy!
I programmi scritti per Arduino sono chiamati sketch. La compilazione del programma, attraverso l'IDE, genera il bytecode (il programma tradotto in linguaggio macchina) che viene quindi trasferito nella memoria di Arduino.
Terminata la ricezione del programma, Arduino inizia ad eseguire quest'ultimo in un loop continuo, è possibile eventualmente effettuare il reset dello stato attraverso un interruttore posizionato sulla scheda.
Questo è uno dei primi sketch da me eseguito su Arduino per verificarne il funzionamento:

/* intermittenza e comunicazione - di Luca Petrosino */
#define GREEN 13
#define RED 12
#define PAUSE 500
#define STOP 60

int start=0;

/* setup dei pin e della porta seriale */
void setup() {
   pinMode(GREEN,OUTPUT);
   pinMode(RED,OUTPUT);
   Serial.begin(9600);
}

/* ciclo da eseguire */
void loop() {
   if (start==STOP) {
      start=0;
      blinkLed(RED);
   }
   else {
      blinkLed(GREEN);
   }
   start++;
}

/* fa lampeggiare il led collegato al pin number */
void blinkLed(int number) {
   Serial.println(start);
   digitalWrite(number,HIGH);
   delay(PAUSE);
   digitalWrite(number,LOW);
   delay(PAUSE);
}

Si tratta di un semplice programma per l'intermittenza di due led, uno verde e l'altro rosso. Per ogni ciclo di loop viene fatto lampeggiare il led verde. Una variabile conteggia il numero di cicli. Quando il conteggio raggiunge il valore STOP, la variabile viene azzerata e il led rosso viene fatto lampeggiare al posto di quello verde.
Ogni programma prevede due distinte funzioni. Attraverso la funzione setup vengono mappati gli input (ad esempio sensori e interruttori) e gli output (ad esempio attuatori e led) usati nel corso del programma. Con la funzione pinMode è possibile specificare se un pin deve funzionare da input o da output. Attenzione, pinMode imposta i pin digitali di Arduino (che ha anche pin analogici e di tipo pwm, pulse width modulation). La funzione riceve come argomenti il numero del pin (nel programma ho definito delle costanti per ogni pin usato) e una costante che può assumere i valori INPUT o OUTPUT a seconda dei casi.
Sempre in fase di setup ho indicato la possibilità di usare nel corso del programma la comunicazione seriale fra Arduino e il PC (con Serial.begin(9600) indico una comunicazione di 9600 bps).
L'altra funzione sempre presente all'interno di programmi per Arduino è la funzione loop. Tutte le istruzioni all'interno di loop vengono eseguite ciclicamente. E' qui che va scritto il codice per istruire Arduino affinché faccia quello che vogliamo! In altre parole la funzione loop è l'equivalente della funzione main per i programmi scritti in c.
Nel programma ho indicato a Arduino di usare i pin 13 e 12 rispettivamente per i led verde e rosso. Il nome dato alle costanti mi aiuta a capire il significato del pin! All'esterno delle due funzioni ho poi dichiarato una variabile per il conteggio, tale variabile sarà visibile all'interno della funzione loop. Essa viene infatti usata per verificare, attraverso il confronto con la costante STOP, il valore di conteggio.
Con Serial.println invio attraverso la porta seriale l'attuale valore di conteggio che leggerò quindi sul monitor del PC. L'accensione di un led avviene con la funzione digitalWrite che invia al pin indicato un livello di tensione HIGH tale da accendere il led collegato. Se si vuole invece spegnere il led bisogna rimettere a LOW il valore di tensione al medesimo pin associato al led. Fra un istruzione e quella successiva ho poi aggiunto dei ritardi attraverso la funzione delay. Il valore dato come argomento alla funzione delay indica il tempo (in millisecondi) da attendere prima di riprendere l'esecuzione delle istruzioni contenute in loop. Arduino ha una velocità di clock pari a 20 MHz e l'esecuzione del programma mostrato risulterebbe eccessivamente veloce!

1 commento:

  1. salve, avrei bisogno di una modifica su un progetto con Arduino, a chi mi posso rivolgere?

    RispondiElimina