Programmazione Arduino : preprocessore e costanti

Le costanti  sono locazioni di memoria nelle quali memorizziamo valori (che evidentemente non cambiano mai) ed alle quali vengono associati nomi;  prima di essere utilizzate devono essere dichiarate.
La seguente è la dichiarazione di una costante intera :
const int numero = 5;        //primo metodo per la dichiarazione delle costanti
Per i possibili tipi di dato da utilizzare vedi questo articolo.
Esiste anche un altro modo per dichiarare costanti, quello che si avvale delle "direttive di preprocessore" :
#define numero=5           //secondo metodo per la dichiarazione delle costanti
Innanzi tutto è da notare che questo tipo di dichiarazione non vuole il punto e virgola finale, dopo di che cerchiamo di capire perchè l'uso di questa forma di dichiarazione delle costanti sia da preferire alla precedente.
Il processo di compilazione di uno Sketch di Arduino, in maniera simile a quanto avviene per i programmi scritti in C, avviene in più "passate" o in più fasi; durante una delle prime fasi di compilazione vengono valutate le direttive al preprocessore. Per quanto riguarda le costanti, il preprocessore non fa altro che scandire la sequenza di istruzioni che costituiscono il programma e sostituire al nome della costante il valore ad essa assegnata; nel nostro caso sostituirà a  "numero"  il valore 5 tute le volte che ne trova una occorrenza..
Tutto questo avviene senza occupazione di spazio di memoria, ed è questo il vantaggio nell'utilizzo di questo tipo di dichiarazione; in un ambiente in cui la memoria a disposizione è 32 Kbyte (tipicamente) si deve risparmiare tutto quanto è possibile.
Utilizzando il primo metodo invece verrà "allocato" uno spazio di memoria dove memorizzare il valore della costante; si usa cioè spazio per memorizzare un valore che non cambia mai.
In Arduino esistono delle costanti pre-dichiarate, vale a dire costanti per le quali non è necessaria dichiarazione, che possono essere utilizzate ovunque nel programma.
true e false : già viste qui
INPUT e OUTPUT : vengono utilizzate per impostare un determinato pin come ingresso o come uscita.
Impostare un pin in INPUT tramite l'istruzione pinMode(X, INPUT) significa mettere il pin X (dove X può assumere valori compresi tra 1 e 13 per Arduino UNO) in una configurazione ad alta impedenza necessaria per esempio per leggere il valore di un sensore. Impostare invece un pin in OUTPUT tramite l'istruzione pinMode (X, OUTPUT) significa mettere il pin X in configurazione di bassa impedenza, questa condizione è utilizzata quando è necessario fornire corrente ad un utilizzatore esterno come ad esempio un led.
HIGH e LOW :  vengono utilizzate per accendere o spegnere un pin (o meglio ciò che è collegato al pin stesso)
Più specificatamente con il pin settato in INPUT tramite pinMode, leggendone il valore tramite digitalRead otterremo HIGH se la tensione in ingresso risulta superiore ai 3V, altrimenti otterremo LOW; con il pin settato in INPUT, tramite l'istruzione digitalWrite sarà possibile portare il pin nello stato "HIGH".
Con il pin settato in OUTPUT tramite pinMode, con l'istruzione digitalWrite sarà possibile portare il pin al valore HIGH il che significa che fra il pin e ground avremo 5V di tensione; impostare il pin a LOW significa che avremo una tensione tra pin e ground pari a 0V.
Di seguito lo sketch "Blink" tratto direttamente dalla libreria di esempi dell'IDE di Arduino, il primo programma da far girare come test, dove sono utilizzati i concetti espressi in questo articolo :
#define pin_led=13
void setup() {
pinMode(pin_led, OUTPUT);                     // initializza il pin in output.

void loop() {

digitalWrite(pin_led, HIGH);                        // accende il led collegato al pin 13 impostando il pin a HIGH
delay(1000);                                                  // aspetta per 1 secondo
digitalWrite(pin_led, LOW);                        // spenge il led impostando il pin a LOW
delay(1000);                                                 // aspetta per 1 secondo
}
Facebooktwittergoogle_pluspinterestlinkedin