Arduino: Tipi di dati

Boleano

La variabile di tipo boleano può assumere un solo valore: vero o falso.

Char

Contiene uno ed un solo carattere definito secondo lo standard ASCII, quindi qualsiasi lettera (maiuscola o minuscola), cifra (da 0 a 9) e simbolo previsto dalla codifica. Arduino lo conserva in forma di numero, anche se quello che si vede è un testo.

Per dichiarare una variabile char, ad esempio inizializzandola con la lettera ‘r’, basta scrivere: char a = ‘r’.

Può contenere valori compresi tra -128 a 127 e occupa un byte di memoria.

Byte

il byte occupa 8 bit, può contenere un valore numerico senza decimali e può assumere un valore compreso tra 0 e 255. Esempio:

byte someVariable = 180; // dichiara ‘someVariable’ come un tipo byte

Int

La variabile di tipo intero è un tipo di dato, molto utilizzato in Arduino, per memorizzare numeri senza decimali. Può assumere valori negativi. Occupa 2 byte, quindi 16 bit di memoria. Il valore può essere compreso tra -32.768 e 32.767 . Esempio:

int someVariable = 1500; // dichiara ‘someVariable’ come un tipo intero

Nota: Le variabili intere se raggiungono il valore massimo (o valori minimi) in una operazione aritmetica o di confronto, per esempio, se x = 32767 e ad una successiva istruzione si aggiunge 1 a x (si toglie 1 a x), il valore di x ricomincia da -32.768 (il valore diventa + 32767).

Unsigned int

È uguale a int, occupa 2 byte di memoria e non può assumere valori negativi. Il suo intervallo va da 0 a 65.535.

Long

Il tipo long è come un int, che utilizza 4 byte, quindi 32 bit per estendere il valore da memorizzare. Infatti il valore che può contenere è compreso tra -2.147.483.648 e 2.147.483.647. Il tipo long non contiene decimali. Esempio:

long someVariable = 90000 // dichiara ‘someVariable’ di tipo long

Unsigned long

Unsigned long è una versione di long che non contiene numeri negativi; infatti può contenere valori compresi tra 0 e 4.294.967.295.

Float

Memorizza un numero a virgola mobile compreso tra -3.4028235E+38 a + 3.4028235E+38. Questo tipo di variabile può rappresentare numeri molto piccoli o numeri molto grandi, positivi e negativi con o senza decimali. La precisione dopo il punto decimale è di 7 cifre. I numeri in virgola mobile per la loro maggiore risoluzione rispetto agli interi, 4 byte cioè 32 bit. Esempio:

float someVariable = 3,14; // dichiara ‘someVariable’ come un tipo in virgola mobile

Nota: i numeri a virgola mobile non sono esatti, e possono portare a risultati anche strani. I calcoli matematici sono più lenti rispetto ai calcoli con variabili intere. Se possibile le variabili di tipo float sono da evitare.

Double

Il tipo double è un numero che ha una precisione a virgola mobile doppia rispetto a Float e può contenere un valore massimo di 1.7976931348623157 x 10308.

String

Il set dei caratteri ASCII può essere usato per contenere informazioni testuali (un messaggio su un display LCD o un messaggio attraverso la comunicazione seriale). Per la memorizzazione viene utilizzato un byte per ogni carattere, più un carattere null (vuoto) per dire ad Arduino che la stringa di caratteri è finita. Un esempio:

char string1[] = “Arduino”; // 7 caratteri + 1 carattere null
char string2[8] = “Arduino”; // Come sopra

Array

Un array è un insieme di valori impilati a cui si accede attraverso un indice. Ogni valore nella tabella o matrice può essere richiamato indirizzando il puntatore numerico nell’indice della tabella. Gli array sono indicizzati a partire dal numero zero, infatti il primo valore posto all’inizio della matrice ha come indice numerico proprio il numero 0.

Un array deve essere dichiarato e, opzionalmente, possono essere assegnati anche i valori prima di utilizzarlo.

Int myArray [] = {valore 0, valore 1, valore 2, …}

Allo stesso modo è possibile dichiarare un array dichiarando il tipo di array e la dimensione e poi assegnare i valori:

int myArray [5]; // dichiara un array di interi avente 6 caselle
myArray [3] = 10; // assegna all’indice 4 il valore 10

Per recuperare un valore contenuto in un array, occorre dichiarare una variabile e poi assegnarla all’indice numerico dell’array:

x = myArray [3]; // ad x verrà assegnato il valore 10

Gli array sono spesso utilizzati nei cicli for, in cui il contatore di incremento viene utilizzato anche come posizione di indice per ogni valore contenuto nella matrice. L’esempio seguente utilizza un array per lo sfarfallio di un LED. Utilizzando un ciclo for, il contatore inizia a scrivere il valore nella posizione 0 dell’indice nell’array sfarfallio [], in questo caso 180, al pin PWM 10, pausa per 200ms, poi si sposta alla posizione di indice successiva.

int ledPin = 10; // inizializzata la variabile ledPin e assegna il valore 10 byte
flicker[] = {180, 30, 255, 200, 10, 90, 150, 60}; // Assegnati 8 valori diversi

void setup()
{
   pinMode(ledPin, OUTPUT); // il pin 10 è un uscita del microcontrollore
}

void loop()
{
   for(int i=0; i<7; i++) // esegue un ciclo utilizzando i numeri contenuti nell’array
   {
      analogWrite(ledPin, flicker[i]); // attiva il Pin con il valore contenuto nell’array
      delay(200); // pausa di 200ms
   }
}