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 :

  1. 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.

  2. 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