Définir une variable
Imaginons que nous voulons stocker le nombre 4 dans une variable. Il tiendrait dans un petit carton. Mais on pourrait le stocker dans un grand container. Oui... mais non! Un microcontrôleur, ce n'est pas un ordinateur 3GHz multicore, 8Go de RAM ! Ici, il s'agit d'un système qui fonctionne avec un CPU à 16MHz (soit 0,016 GHz) et 2 Ko de SRAM pour la mémoire vive. Il y a donc au moins deux raisons font qu'il faut choisir ses variables de manière judicieuse :
La RAM n'est pas extensible, quand il y en a plus, y en a plus! Dans un même volume, on peut stocker bien plus de petits cartons de que gros containers. Il faut donc optimiser la place.
Le processeur est de type 8 bits (sur un Arduino UNO), donc il est optimisé pour faire des traitements sur des variables de taille 8 bits, un traitement sur une variable 32 bits prendra donc (beaucoup) plus de temps. Si les variables de la taille d'un container sont sur 32 bits, autant prendre un carton qui n'occupe que 8 bits quand la variable tient dedans!
Type de variable | Type de nombre stocké | Valeurs maximales du nombre stocké | Nombre sur X bits | Nombre d'octets |
---|---|---|---|---|
int | entier | -32 768 à +32 767 | 16 bits | 2 octets |
long | entier | -2 147 483 648 à +2 147 483 647 | 32 bits | 4 octets |
char | entier | -128 à +127 | 8 bits | 1 octet |
float | décimale | -3,4 x 1038 à +3,4 x 1038 | 32 bits | 4 octets |
double | décimale | -3,4 x 1038 à +3,4 x 1038 | 32 bits | 4 octets |
Prenons maintenant une variable que nous allons appeler «x». Par exemple, si notre variable "x" ne prend que des valeurs décimales, on utilisera les types int, long, ou char. Si maintenant la variable "x" ne dépasse pas la valeur 64 ou 87, alors on utilisera le type char.
char x = 0;
Si en revanche x = 260, alors on utilisera le type supérieur (qui accepte une plus grande quantité de nombre) à char, autrement dit int ou long.
int x = 0;
Si à présent notre variable "x" ne prend jamais une valeur négative (-20, -78, ...), alors on utilisera un type non-signé. C'est à dire, dans notre cas, un char dont la valeur n'est plus de -128 à +127, mais de 0 à 255.
Voici le tableau des types non signés, on repère ces types par le mot unsigned (de l'anglais : non-signé) qui les précède :
Type de variable | Type de nombre stocké | Valeurs maximales du nombre stocké | Nombre sur X bits | Nombre d'octets |
---|---|---|---|---|
unsigned char | entier non négatif | 0 à 255 | 8 bits | 1 octet |
unsigned float | entier non négatif | 0 à 65 535 | 16 bits | 2 octets |
unsigned double | entier non négatif | 0 à 4 294 967 295 | 32 bits | 4 octets |
Une des particularités du langage Arduino est qu'il accepte un nombre plus important de types de variables, listées dans ce tableau:
Type de variable | Type de nombre stocké | Valeurs maximales du nombre stocké | Nombre sur X bits | Nombre d'octets |
---|---|---|---|---|
byte | entier non négatif | 0 à 255 | 8 bits | 1 octet |
word | entier non négatif | 0 à 65 535 | 16 bits | 2 octets |
boolean | entier non négatif | 0 à 1 | 1 bits | 1 octet |