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
}
proprio oggi mi è arrivato arduino. ho trovato il tuo blog e ho eseguito questo script. Grazie per averlo condiviso!
RispondiElimina