PrettyPrint

domenica 7 febbraio 2010

Uno sketch per il test dell'installazione

blink.pde


Il classico "hello world" dei sistemi embedded è un LED che lampeggia.

Arduino ha un LED in tecnologia surface-mount, già on-board e collegato al pin digitale 13...useremo quello.

Già che ci siamo, testiamo anche il flusso seriale fra Arduino e PC, per verificare la corretta installazione/configurazione di librxtxjava.

L'idea del nostro "hello world" è allora molto semplice: far lampeggiare il LED, ma impostarne il tempo di accensione/spegnimento dal PC, via seriale/USB: inviando la lettera 'u' si aumenta il tempo di 100ms, inviando la lettera 'd', si diminuisce sempre di 100ms

Dal menù Tools -> Board si selezionerà il tipo di Arduino impiegato (es. Arduino Diecimila...)

Dal menù Tools > Serial port si selezionerà la porta seriale/USB in uso (es. /dev/ttyUSB0)

Fatto questo si creerà un nuovo sketch e nell'editor (File -> New) si farà il copia&incolla del sorgente riportato più avanti.

Una volta salvato (es. BLINK.PDE) successivamente si farà il click sulle tre icone:


VERIFY: è la fase di compilazione e collegamento: vengono generati diversi file (fra cui quello oggetto in formato HEX) e messi in una dir. temporanea (es. /tmp/build* in ambiente Linux)


UPLOAD: il file oggetto HEX viene caricato dal software di programmazione (avrdude) nella memoria flash di Arduino. Contestualmente viene creata una sottodirectory ./applet in cui vengono copiati tutti i file precedentemente messi nella dir. temporanea


MONITOR: è un terminale di scrittura/lettura per dialogare con la seriale


Terminato l'upload, il piccolo LED sulla scheda inizierà a lampeggiare inizialmente a un tempo di circa 100ms.

Digitando la lettera 'u' e premendo il bottone Send del monitor seriale il periodo verrà incrementato di 100ms e così fino a 1s (1000 ms);successivi invii della lettera 'u' non sortiranno alcun effetto e quindi si potrà solo scendere di tempo (lettera 'd') fino a 100ms.


Ecco lo sketch:


/*
* BLINK.PDE
*
* Autore: Francesco Parisi ( fparisi at tiscali dot it )
*
* Motivazione: "Blinka" il LED di Arduino con un tempo da 100ms a 1s regolabili dal PC
*
* Uso: L'utente dal PC, attraverso un emulatore di terminale, inviando
* il carattere 'u' aumenta di 1s il tempo di lampeggio, mentre lo
* diminuisce inviando il carattere 'd'
*
* Limitazioni: L'utente non può andare oltre il secondo o al di sotto di 100ms
*
*/


#define LEDPIN 13 // Sul pin 13 è collegato il LED montato su Arduino


/*** Definizioni globali ***/

int incomingByte = 0; // Primo byte di input dallo stream seriale
long t = 100; // Tempo di lampeggio in ms, inizialmente 100ms


/*** Impostazione dell'hardware ***/

void setup()
{
pinMode( LEDPIN, OUTPUT ); // Imposto il pin 'LEDPIN' come di uscita
Serial.begin( 9600 ) ; // Imposto uno stream seriale a 9600 bps
}

/*** Esegue continuamente ***/

void loop()
{
digitalWrite( LEDPIN, HIGH ); // Manda livello alto sul pin 'LEDPIN' (LED on)
delay( t ); // Aspetta 't' ms

digitalWrite( LEDPIN, LOW ); // Manda livello basso sul pin 'LEDPIN' (LED off)
delay( t ); // Aspetta 't' ms


if ( Serial.available() > 0 ) // Se ci sono caratteri in arrivo dal PC...
{
incomingByte = Serial.read(); // ...leggi il primo carattere
if ( incomingByte == 'u' ) // se è 'u' (sta per UP)...
t += 100; // ...incrementa di 100ms
else if ( incomingByte == 'd' ) // altrimenti se è 'd' (sta per DOWN)...
t -= 100; // ...decrementa di 100ms

if ( t > 1000 ) // se si prova a salire oltre 1s...
t = 1000; // ...imposta t a 1s
else if ( t < 100 ) // se si prova a scendere sotto i 100ms...
t = 100; // ...imposta t a 100ms

}

Serial.print( t , DEC ); // Scrivi il tempo in ms
Serial.println( " ms" ); // Scrivi " ms" (unità di misura) e ritorna a capo

}

1 commento:

  1. proprio oggi mi è arrivato arduino. ho trovato il tuo blog e ho eseguito questo script. Grazie per averlo condiviso!

    RispondiElimina