Arduino

Arduino

Pillole su Arduino

I componenti che a noi interessano per usare il microcontrollore sono:

1) pin digitali da 0 a 13 posti nella parte alta;
2) pin analogici A0 - A1 - A2 - A3 - A4 - A5 posti nella parte bassa a destra;
3) pin di alimentazione a 5V e 3.3 V posti a sinistra dei pin analogici;
4) pin di massa GND, due posti vicino ai pin di alimentazione ed uno vicino al pin 13;
5) connettore o porta USB posta a sinistra in alto sul lato corto;
6) connettore per l'alimentazione da 7V a 12V posto a sinistra in basso sul lato corto sotto la USB.

Tra i pin digitali ci sono quelli contrassegnati con la tilde ( ~ ) e rappresentano i pin PWM (pulse with modulation) che hanno un impiego particolare.
Se c'è bisogno, i pin digitali possono essere aumentati trasformando quelli analogici tramite una dichiarazione nel codice. Si passa quindi da 13 a 19 partendo da A0(14) fino ad A5(19).

Wiring
Questo tipo di linguaggio si avvicina molto al C++. Il codice scritto prende in nome di sketch ed è composto da tre parti:





1° parte per la dichiarazione delle librerie, delle variabili, delle costanti e delle routine (zona che inizia dalla riga 1)
2° parte o funzione di setup() o di inizializzazione; eseguita una sola volta all'avvio del programma
3° parte o funzione di loop() ripetuta fino a quando il microcontrollore è alimentato.

Variabili
Sono degli elementi fondamentali per ogni tipo di linguaggio di programmazione. Le tipologie più usate in Arduino sono:

- byte : occupa 1 byte di memoria e può contenere un numero da 0 a 255

- int : occupa 2 byte di memoria e può contenere un numero tra -32768 e 32767

- unsigned int : come int ma può contenere solo numeri positivi da 0 a 65535

- long : occupa 4 byte di memoria e può contenere numeri tra -2.147.483.648 e 2.147.483.647

- unsigned long : come long ma può contenere numeri positivi da 0 a 4.294.967.295

- float : utilizza 4 byte di memoria e contiene numeri con la virgola

- double : numeri con molte cifre dopo la virgola a doppia precisione; utilizza 4 byte

- char : occupa 1 byte di memoria se la si usa come numero ed ha un range da -128 a 127; se la si usa come testo può contenere un qualsiasi carattere ASCII; se si usa la forma char[] diventa una variabile di tipo String e può contenere un testo; in questo caso occuperà un byte per ogni carattere + un carattere NULL che indica la fine del testo

- array : è una variabile di tipo int o char dichiarate da un nome seguito da una parentesi quadra aperta, da un numero e da una parentesi quadra chiusa; il numero tra le parentesi quadre rappresenta il numero di elementi di cui è costituito l'array.

Un modo per definire una variabile assegnandole un valore è #define nome valore.
Ad esempio: #define stato 8: in questo modo il programma assegna a tutte le occorrenze stato il valore 8.
Si usa spesso il metodo più semplice come int stato = 8; oppure byte stato = 8; che sono equivalenti al primo.

Routine ed istruzioni di controllo
Una routine è classificata con la seguente struttura:
void nome_routine(void)
{
istruzioni
}


Per chiamare una routine è necessario scrivere il suo nome seguito da (): nome_routine().

Istruzioni di controllo
Le istruzioni di questo tipo sono simili a quelle di altri linguaggi di programmazione. Le più usate sono:
1) if(condizione)....else....
2) for(...;...;...)
3) switch....case...break...default....
4) while(condizione).....
5) do....while(condizione)
6) break
(blocca un ciclo for, oppure do, oppure while e fa continuare il programma fuori dal ciclo)
7) continue (blocca un ciclo for, oppure do, oppure while e torna alla verifica della condizione)

Librerie
Sono particolari routine, scritte anche da utenti, che servono a svolgere specifiche funzioni specialmente quando si usano sensori o attuatori. Per includere una libreria nel programma si usa il comando:
#include
Queste librerie devono risiedere nella cartella Libreries di Arduino e possono essere scaricate dalla rete.

Funzioni che agiscono sui pin
I pin della scheda Arduino possono essere impostati come componenti che ricevono un segnale(INPUT) oppure come componenti che forniscono un segnale(OUTPUT).
Per fare ciò si usa il comando pinMode(nome/numero_pin,modalità). Ad esempio:
pinMode(10,OUTPUT) significa che il pin 10 è impostato per dare un segnale all'esterno come un led che viene acceso.
Se si usano i pin digitali, esistono due modalità che indicano o lettura o assegnazione e sono: HIGH e LOW che corrispondono agli stati 1 e 0.
Il comando digitalWrite(pin, modalità) consente di utilizzare questi due stati. Ad esempio:
digitalWrite(8,HIGH) significa che al pin 8 viene dato un segnale alto cioè 1. Invece il comando alfa = digitalRead(stato del pin) assegna alla variabile alfa il valore 1 oppure 0 a seconda dello stato del pin.

Per quanto riguarda i pin analogici, il comando beta = analogRead(nome_pin) assegna alla variabile beta un numero compreso tra 0 e 1023 proporzionale alla tensione che è stata rilevata. il valore 0 corrisponde a 0 V mentre 1023 a 5V.
Il comando analogWrite(pin,valore) permette di usare un pin digitale (quelli con la tilde) come se fosse un pin analogico assegnando ad esso una tensione tra 0 e 5V proporzionale al numero, compreso tra 0 e 255) inserito nella variabile valore.
Su Arduino i pin PWM sono solo 11, 10, 9, 6,5,3.

Comunicazione seriale
Mediante questo tipo di comunicazione è possibile trasferire dati da Arduino verso dispositivi esterni connessi alla porta seriale come, ad esempio, il PC e dall'esterno verso lo stesso Arduino.
I comandi più utilizzati sono:

- Serial.begin(baud rate): imposta la velocità di trasmissione dei dati
- Serial.print(valore): invia all'esterno un valore senza andare a capo
- Serial.println(valore): invia all'esterno un valore andando a capo
- Serial.read(): legge un carattere persente sulla porta seriale
- Serial.available(): controlla se nella seriale vi sono presenti dati per essere letti

Funzioni temporali
Le più usate sono:
- millis() che indica il tempo in millisecondi trascorso da quando arduino è stato alimentato
- delay(valore) arresta l'esecuzione del programma per un certo tempo, espresso in millisecondi, pari a valore: ad esempio, delay(1000) stabilisce una pausa di 1 secondo.

Generazione di numeri casuali
La funzione usata è quella che sitrova in quasi tutti i linguaggi di programmazione cioè random.
La sua sintassi è la seguente:
1) random(N) : sceglie un numero a caso tra 0 ed N
2) random(Min,Max) : sceglie un numero compreso tra il valore Min ed il valore Max

Per evitare di avere la stessa sequenza di numeri ad ogni avvio del programma, si utilizza un generatore che viene sempre inizializzato ad ogni loop. Il comando è randomSeed(valore) dove, spesso, al posto di valore è usata la funzione millis() che, come sappiamo, varia ogni millisecondo.

Funzioni matematiche
Tutte quelle che esistono sono reperibili nella sezione specifica dell'ambiente di sviluppo. Alcune di esse sono:
- sqrt(x): calcola la radice quadrata di x
- pow(base,esponente): esegue una potenza in funzione di base ed esponente
- abs(x): calcola il valore assoluto di x
- etc.....

Una funzione molto usata è risultato = map(X,daMin, daMax, aMin, aMax).
Essa assegna alla variabile risultato un valore compreso tra aMin ed aMax calcolato tenendo presente la proporzione che c'è tra X e gli estremi daMin e daMax. Ad esempio:
risultato = map(512, 0, 1023, 0, 5) dove risultato è uguale a 2.5.