Ambiente di programmazione: Arduino.exe
Il programma che viene usato per scrivere i programmi per Arduino si chiama arduino.exe ed è scaricabile dal sito http://arduino.cc/en/Main/Software.
Il programma si presenta con un'interfaccia grafica come quella evidenziata dalla figura che segue.
Il programma da noi scritto si chiama sketch che significa progetto.
Strutturta del programma
Il codice di qualsiasi programma per Arduino è composto essenzialmente di due parti:void setup() - Questo è il posto dove mettiamo il codice di inizializzazione. Inizializza tutte le impostazioni e le istruzioni della scheda prima che il ciclo principale del programma si avvii. La funzione predefinita setup() viene eseguita solo all'accensione di Arduino oppure dopo aver premuto il pulsante reset.
void setup()
{
}
void loop() - E' il contenitore del codice principale del programma. Contiene una serie di istruzioni che possono essere ripetute una dopo l'altra fino a quando non spegniamo la scheda Arduino. La funzione predefinita loop() quindi viene eseguita da Arduino per tutto il tempo in cui resta alimentato
void loop()
{
}
Basi della programmazione di Arduino
Tipi di dato
In informatica un tipo di dato è un nome che indica l'insieme di valori che una variabile può assumere e le operazioni che su tali valori si possono effettuare. Dire per esempio che la variabile X è di tipo "numero intero" significa affermare che X può assumere come valori solo numeri interi appartenenti ad un certo intervallo.
Il tipo di una variabile o di costante determina la quantità di spazio che occupa nella memoria e come la sequenza di bit memorizzato viene interpretato.
Qualsiasi dato presente in uno skecth deve essere associato a un tipo di dato.
Le costanti sono valori preimpostati nel linguaggio di Arduino che possono essere usate come ogni altro tipo di variabile ma che il loro valore non può essere cambiato. Si può utilizzare const o #define per creare una costante numerica o di tipo String. Per gli array occorre che venga utilizzato il termine const.
Le variabili sono dei contenitori di dati, il loro valore è modificabile durante l'esecuzione del programma. La variabile deve essere dichiarata e le può essere assegnato inizialmente un valore che resta in memoria fino a quando non viene sostituito da un altro valore durante l'esecuzione del programma.
Il codice seguente dichiara una variabile denominata inputVariable con valore iniziale 0 e poi le viene dato il valore ottenuto sul pin di ingresso analogico 2:
int inputVariable = 0; dichiara una variabile e assegna il valore 0
inputVariable = analogRead (2); il valore acquisito sul pin analogico 2 viene assegnato alla variabile inputVariable
La prima riga dichiara che conterrà un valore int, (abbreviazione di numero intero). La seconda riga assegna alla variabile inputVariable il valore analogico prelevato sul pin 2 del microncontrollore Arduino. Questo rende il valore del pin accessibile in altre parti del programma.
char - Contiene un singolo carattere. Quando i caratteri sono usati per registrare un numero, possono contenere un valore compreso tra -128 e 127.
byte - Può contenere un numero tra 0 e 255. Come un carattere usa solamente un byte di memoria.
int - Contiene un numero compreso tra -32'768 e 32'767. E' il tipo di variabile più usata e usa 2 byte di memoria.
unsigned int - Ha la stessa funzione di int, solo che non può contenere numeri negativi, ma numeri tra 0 e 65.535.
long - E' il doppio delle dimensioni di un int e contiene i numeri da -2'147'483'648 a 2'147'483'647.
unsigned long - Versione senza segno di long va da 0 a 4'294'967''295.
float - Può memorizzare numeri con la virgola. Occupa 4 bytes della RAM.
double - A doppia precisione in virgola mobile con valore massimo di 1'7976931348623157x10^308.
string - Un set di caratteri ASCII utilizzati per memorizzare informazioni di testo. Per la memoria, usa un byte per ogni carattere della stringa, più un carattere NULL che indica ad Arduino la fine della stringa.
array - un elenco di variabili accessibili tramite un indice. Vengono utilizzate per creare tabelle di valori facilmente accessibili.
Significato di alcuni tipi
boolean - Può assumere solamente due valori: vero o falso.
char - Contiene un singolo carattere. Quando i caratteri sono usati per registrare un numero, possono contenere un valore compreso tra -128 e 127.
byte - Può contenere un numero tra 0 e 255. Come un carattere usa solamente un byte di memoria.
int - Contiene un numero compreso tra -32'768 e 32'767. E' il tipo di variabile più usata e usa 2 byte di memoria.
unsigned int - Ha la stessa funzione di int, solo che non può contenere numeri negativi, ma numeri tra 0 e 65.535.
long - E' il doppio delle dimensioni di un int e contiene i numeri da -2'147'483'648 a 2'147'483'647.
unsigned long - Versione senza segno di long va da 0 a 4'294'967''295.
float - Può memorizzare numeri con la virgola. Occupa 4 bytes della RAM.
double - A doppia precisione in virgola mobile con valore massimo di 1'7976931348623157x10^308.
string - Un set di caratteri ASCII utilizzati per memorizzare informazioni di testo. Per la memoria, usa un byte per ogni carattere della stringa, più un carattere NULL che indica ad Arduino la fine della stringa.
array - un elenco di variabili accessibili tramite un indice. Vengono utilizzate per creare tabelle di valori facilmente accessibili.
Funzioni e comandi principali
pinMode(pin,mode) - Riconfigura un pin digitale a comportarsi come uscita o come entrata.
Es. pinMode(13,INPUT) - imposta il pin 13 come Input.
digitalWrite(pin,value) - imposta un pin digitale ad ON o a OFF generando una tensione HIGH (5 Volt) o LOW (0 Volt).
digitalWrite(pin,value) - imposta un pin digitale ad ON o a OFF generando una tensione HIGH (5 Volt) o LOW (0 Volt).
Es. digitalWrite(7,HIGH) - imposta il pin 7 ad una tensione HIGH.
digitalRead(pin) - Legge lo stato di un input Pin, ritorna HIGH se il Pin riceve della tensione oppure LOW se non c’è tensione applicata.
digitalRead(pin) - Legge lo stato di un input Pin, ritorna HIGH se il Pin riceve della tensione oppure LOW se non c’è tensione applicata.
Es. Val=digitalRead(7); // legge il pin 7 dentro a val
analogRead(pin) - Legge la tensione applicata a un ingresso analogico e ritorna un numero tra 0 e 1023 che rappresenta le tensioni tra 0 e 5 V.
analogRead(pin) - Legge la tensione applicata a un ingresso analogico e ritorna un numero tra 0 e 1023 che rappresenta le tensioni tra 0 e 5 V.
Es. val=AnalogRead(0); // legge l’ingresso analogico 0 dentro a val
analogWrite(pin,value) - Cambia il duty cycle del segnale PWM su uno dei pin segnati PWM, value può essere un valore da 0 a 255 che rappresenta la scala da 0 a 5 V.
analogWrite(pin,value) - Cambia il duty cycle del segnale PWM su uno dei pin segnati PWM, value può essere un valore da 0 a 255 che rappresenta la scala da 0 a 5 V.
Es. analogWrite(9,128);
millis() - Ritorna il numero in millisecondi trascorsi dall’inizio del programma.
Es. durata=millis() // calcola il tempo trascorso
delay(ms) - Mette in pausa il programma per un numero di millisecondi specificato.
delay(ms) - Mette in pausa il programma per un numero di millisecondi specificato.
Es. delay(1000); //ferma il programma per 1 secondo
delayMicroseconds(us) - Come delay mette in pausa il programma ma l’unità di misura è molto più piccola, parliamo di microsecondi.
delayMicroseconds(us) - Come delay mette in pausa il programma ma l’unità di misura è molto più piccola, parliamo di microsecondi.
Es. delayMicroseconds(2000); // aspetta per 2 millisecondi (1000us=1ms)
Esempio di utilizzo dei comandi pinMode, digitalWrite, delay
Esempio di utilizzo dei comandi pinMode, digitalWrite, delay
Serial.begin(speed) - Prepara Arduino a mandare e a ricevere dati tramite porta seriale con velocità data dal valore speed
Es. Serial.begin(9600);
Serial.print(data) - Invia alcuni dati alla porta seriale senza andare a capo.
Serial.println(data) - Invia alcuni dati alla porta seriale andando a capo.
Es. Serial.println("ciao"); scrive sulla porta seriale ciao e va a capo
Serial.read() - Legge un byte di dati in entrata sulla porta Seriale.
Es. Serial.begin(9600);
Serial.print(data) - Invia alcuni dati alla porta seriale senza andare a capo.
Serial.println(data) - Invia alcuni dati alla porta seriale andando a capo.
Es. Serial.println("ciao"); scrive sulla porta seriale ciao e va a capo
Serial.available() - Restituisce il numero di bytes disponibili sulla porta seriale per leggerli tramite la funzione read().
Es. if (Serial.available()>0) // controlla se ci sono dati sulla porta seriale
Serial.read() - Legge un byte di dati in entrata sulla porta Seriale.
Es. data=Serial.read(); // Legge un byte e lo mette nella variavile val.
Esempio n.1 di utilizzo della porta seriale
Led Lampeggiante
Esempio n.1 di utilizzo della porta seriale
Led Lampeggiante
Esempio n.2 di utilizzo della porta seriale
Accensione di un led con comandi dalla porta seriale
Il linguaggio di Arduino include parole chiave per controllare il progetto logico del nostro codice.
If…else - Permette di prendere delle decisioni all’interno del programma. Deve essere seguito da una domanda sotto forma di espressione tra parentesi. Se la domanda è vera tutto ciò che segue verrà eseguito. Se falso verrà eseguito tutto il codice che segue else. Es. if (val==1) { digitalWrite(LED, HIGH); }
For - Ripete il codice per un numero predefinito di volte.
Es. for(int i=0;i<10;i++) { Serial.print(“Ciao”); } //stampa 10 volte “Ciao”
Switch - E’ come un interruttore nel corso del programma. Fa prendere al programma diverse direzioni in base al valore della variabile (il suo nome deve essere messo tra parentesi dopo switch). E’ utile perché può sostituire lunghe serie di if.
Es.
switch(valoresensore)
{
case 38:
digitalwrite(12, High);
break;
case 55:
digitalwrite(3, High);
break;
}
While - Esegue un blocco di codice fino a quando una certa condizione posta tra le parentesi è vera.
Es.
while(valoresensore<500)
{
igitalWrite(13, HIGH);
delay(100);
valoresensore=analogRead(1);
}
Nessun commento:
Non sono consentiti nuovi commenti.