Skip to content

Costanti e Variabili

Ogni programma, anche il più semplice, ha bisogno di ricordare delle informazioni durante la sua esecuzione: la temperatura letta da un sensore, quante volte è stato premuto un pulsante, se un LED è acceso o spento, eccetera…

In C++, questi dati vengono salvati in due modi diversi a seconda di una domanda fondamentale: questo valore cambierà mai durante l’esecuzione del programma?

  • Se la risposta è no -> si usa una Costante
  • Se la risposta è -> si usa una Variabile

Una costante è un valore fissato una volta per sempre. Arduino lo legge, lo usa, ma non può mai modificarlo durante l’esecuzione del programma.

Il tuo indirizzo di casa non cambia mentre sei fuori a passeggiare. È scritto sul campanello ed è sempre quello. Una costante funziona allo stesso modo: è un’etichetta fissa che punta sempre allo stesso valore.

Per definire una costante si usa la direttiva #define, che va scritta in cima al file, prima di tutto il resto.

// Sintassi: #define NOME valore
#define RED_LED 5
#define GREEN_LED 6
#define BUTTON_PIN 3

Una variabile è una “scatola” nella memoria di Arduino a cui diamo un nome. Il contenuto di questa scatola può essere letto e modificato quante volte si vuole durante l’esecuzione del programma.

Pensa a un contatore di monete in un videogioco. Parte da 0, poi sale ogni volta che si raccoglie una moneta, scende se si compra qualcosa, eccetera. Il valore cambia continuamente: è una variabile.

Per creare una variabile bisogna specificare tre cose:

  1. Il tipo di dato che conterrà (numero intero / decimale / vero o falso)
  2. Un nome per identificarla
  3. Un valore
// Sintassi: tipo nome = valore;
int monete = 0;

C++ vuole sapere che tipo di informazione si metterà in una variabile. Questo perché tipi diversi occupano quantità diverse di memoria, e le operazioni che si possono fare su di essi cambiano.

Usato per numeri senza virgola, positivi o negativi. Occupa 2 byte di memoria, il che gli impone un range preciso di valori rappresentabili.

int -> da -32.768 a +32.767
int contatore = 0;
int temperatura = -5;
int livello = 255;

Quando i valori da memorizzare superano i limiti di int, si usa long. Occupa 4 byte di memoria (il doppio di int) e può quindi contenere numeri molto più grandi.

long -> da -2.147.483.648 a +2.147.483.647
long distanzaKm = 384400;       // Distanza Terra-Luna in km
long millisecondi = 1000000;    // Un milione di ms

Usato per numeri con la virgola. Attenzione: in C++ il separatore decimale è il punto, non la virgola.

float temperatura = 23.5;
float tensione = 3.14;

Può contenere solo due valori: true (vero) oppure false (falso). Perfetto per tenere traccia di stati: il LED è acceso o spento? Il pulsante è premuto o no?

bool ledAcceso = false;
bool allarmeAttivo = true;

Contiene un singolo carattere, scritto tra apici singoli ' '.

char voto = 'A';
char iniziale = 'M';

Per memorizzare una sequenza di caratteri (una parola, una frase), si usa un array di char. Il testo va scritto tra virgolette doppie " ".

Gli array li tratteremo più avanti. Detta in breve, un array è un insieme di dati; in questo caso, una stringa è un insieme di caratteri.

char saluto[] = "Ciao mondo";
char messaggio[] = "Temperatura OK";

TipoCosa contieneRangeEsempio
#defineCostante fissa-#define LED_PIN 5
intNumero intero-32.768 -> 32.767int contatore = 0;
longNumero intero grande-2.147.483.648 -> 2.147.483.647long ms = 100000;
floatNumero decimale~3.4×10⁻³⁸ -> ~3.4×10³⁸float temp = 23.5;
boolVero o falsotrue / falsebool acceso = false;
charUn singolo carattere-char lettera = 'A';
char[]Una stringa di testo-char msg[] = "Ciao";