Nous devons déclarer les variables que l'on utilisera dans le programme que l'on va écrire et, de plus, spécifier leurs types respectifs.
Quand nous parlons de variables, nous pouvons imaginer dans notre esprit une sorte de boîte, à laquelle nous attribuons un type de valeur, et dans laquelle nous stockons des valeurs, qui, comme son nom l'indique, varient.
Le type de variable que nous utilisons est, hélas, souvent négligé.
Bien entendu, ce n'est pas un impératif, si vous connaissez déjà les INT, pour les nombres entiers et les FLOAT, pour les nombres à virgules, vous pouvez parfaitement vous en sortir !
Seulement voilà, rouleriez-vous en formule 1 sur un terrain de karting ou en karting sur un circuit de F1 ??
Perso Moi non, dans le premier cas, je me sentirais fortement à l'étroit et dans le second,… une brouette dans le désert ;)
Avec les type de variables, que nous imaginerons comme des “boites”, c'est exactement la même chose.
Oui, mais concrètement je comprends pas, c'est quoi l'application concrète?
C'est une excellentes question et la réponse est simple : la gestion de la mémoire.
Imaginer que vous utilisez une boite (int) dans laquelle on peu stocker 65 535 petites billes. Vous écrivez votre programme et vous appelez votre boite (variable) pour y stocker soit une bille soit aucune (un boolean), il vous reste de l'espace pour 65 534 billes ! C'est donc autant de mémoire et donc, entre autre, de rapidité que vous perdez !
Si, pour stocker une valeur booléenne, vous utilisez une plus petite boite qui peu contenir uniquement deux valeurs (0-1, TRUE-FALSE, HIGH-LOW) là, on commence à être dans l'optimisation et dans la gestion intelligente des ressources de votre Arduino. Il ne reste pas d'espace vide dans ma boite.
Quand vous téléversez votre code dans l'Arduino, jetez un petit coup d’œil en bas de l'IDE, vous y verrez indiqué :
le nombre et le pourcentage utilisé en Octets dans l'espace de stockage
le nombre et le pourcentage utilisé en octets par les variables globales
et ce qu'il reste pour les variables locales
Un “boolean” est un booléen. Il s’agit d’une donnée ne pouvant prendre que 2 valeurs: true (vrai) ou false (faux). Il est également possible de remplacer true par 1 et false par 0 pour un booléen. Chaque variable booléenne occupe un byte de mémoire.
Une donnée byte peut stocker un nombre non signé sur 8 bits, de 0 à 255.
Les données Char sont des données pouvant contenir un caractère. C’est un type de donnée qui occupe un octet de mémoire. caractère s’écrit dans une variable char entre guillemets simples comme ceci: ‘A’. Pour écrire plusieurs caractères, ce qu’on appelle aussi une chaîne de caractères (string), on utilisera les guillemets doubles comme ceci: “ABC”.
Une donnée de type short peut stocker un nombre entier sur 16 bits quel que soit la carte Arduino utilisée : de -32 768 à 32 767 (soit une valeur minimale de -215 et une valeur maximale de 215-1).
Les données int représentent les données de stockage des nombres entiers. Il s’agit du type de donnée principal pour le stockage des nombres. Int stocke une valeur sur 16 bits, soit 2 octets. Cela donne une fourchette de -32 768 à 32 767 (soit une valeur minimale de -215 et une valeur maximale de 215-1).
Les Unsigned Int fonctionnent de la même manière que les Int. La différence ici, c’est que les nombres négatifs ne sont plus pris en compte. Le nombre est toujours encodé sur 2 bytes, soit 16 bits, soit 2 octets. La plage positive est donc plus grande : de 0 à 65 535 (216-1). Les Arduino Due, MKR1000, Zero étant sur des nombres en 32 bits, la plage de ce type de données se situe entre 0 et 4 294 967 295 (232-1).
Les variables Long peuvent stocker des nombres entiers sur 4 bytes, soit 32 bits : de -2 147 483 648 (-231) à 2 147 483 647 (231+1).$
Les variables Unsigned long peuvent stocker des nombres non signés entiers sur 32 bits : de 0 à 4 294 967 295 (232-1).
Le type de données float permet de stocker un nombre à virgule flottante. Les variables float sont souvent utilisées pour approcher les valeurs analogiques et continues car la donnée float possède une plus grande résolution que les nombres entiers.
Sur Arduino UNO et autres cartes munies de processeur ATMEGA, une donnée double fonctionne exactement de la même manière qu’une donnée float. Elle occupe également 32 bits, sans gain de précision supplémentaire. Par contre sur Arduino Due, MKR1000 ou Zero, la donnée double occupe 64 bits, ce qui offre plus de précision.
Bon fini le blabla, vous l'aurez compris, prenez le temps de déclarer vos variables en fonction de la nécessité de leurs applications, et pour vous aidez, voici le tableau des différentes variables utilisables dans Arduino.
Type | Taille en mémoire | Valeurs min | Valeurs max |
---|---|---|---|
boolean | 1 octet (8 bits) | false | true |
byte | 1 octet (8 bits) | 0 | 255 |
char | 1 octet (8 bits) | -128 | 127 |
int | 2 octet (16 bits) | -32768 | 32767 |
unsigned int | 2 octet (16 bits) | 0 | 65535 |
long | 4 octet (32 bits) | -2147483648 | 2147483647 |
unsigned long | 4 octet (32 bits) | 0 | 4294967295 |
float, double | 4 octet (32 bits) | -3.4028235E+38 | 3.4028235E+38 |