Ardu? No!Initiation ≫ Ne rien faire

Ne rien faire

Tout d'abord, nous allons tester le programme qui ne fait rien du tout. C'est celui qui s'ouvre par défaut. Dans un premier temps, je m'intéresse au fichier, à son emplacement. Nous verrons dans un deuxième temps ce que l'on doit mettre dedans.

En français?

>Exécutez le logiciel Arduino, par exemple par son raccourci, une fenêtre doit s'ouvrir. C'est l'IDE d'Arduino, un programme qui nous permet facilement d'écrire pour la carte Arduino, de compiler le code écrit, de tester, de voir un écran pour l'affichage...

Image: vue de l'IDE

Par défaut les menus sont en anglais. Passons les tout d'abord en Français (ce n'est pas obligatoire). Pour cela cliquez sur File puis sur Preferences puis cherchez English à la ligne Languages. Choisissez français dites OK. Le programme se relance normalement en français.

Répertoire et fichier

Tout en haut va se trouver le nom du fichier qui contiendra votre code. Par défaut c'est sketch_XXXXa.ino, XXXX étant la date du jour. Derrière le nom se trouve le nom du programme Arduino et la version (La version que j'ai au jour ou cette page est écrite est la 2.0.2 mais comme vous lirez cette page plus tard, la version ne sera pas la même). J'espère que l'onglet fichier vous parle et que enregistrer et enregistrer sous vous sont familiers.

Au début, vous aurez un projet qui ne contiendra qu'un seul fichier. C'est un fichier texte pur, et c'est du langage C. On l'aperçoit dans le cadre au milieu. Pour que l'IDE fonctionne, il faut que le fichier .ino se trouve seul (au début) dans un répertoire du même nom sans extension. C'est pour cela que quand on utilise "sauvegarder sous", il crée le répertoire du même nom et y met dedans le fichier.

Si vous dites rien, la sauvegarde se fera dans un endroit qui peut être peu pratique. Chez moi, il crée un répertoire caché Arduino et se met dedans. Ce ne sera pas du tout pratique pour le retrouver si on a un jour deux fichiers. Mais vous pouvez le sauvegarder où vous voulez.

La carte Arduino

On peut parfaitement savoir si ce que l'on a écrit est compréhensible ou pas (l'IDE peut le dire), mais le programme ne peut pas pour l'instant s'exécuter. Ce programme ne peut pas fonctionner sur un ordinateur car il est conçu pour la carte Arduino. Si on veut exécuter quelque chose, il faut une carte. Les premières fois, cela va paraître bizarre car on a l'impression que la carte ne sert à rien, mais c'est bien elle qui va faire tourner ce que l'on a écrit.

Branchez donc votre carte avec un câble USB. Pour établir le dialogue, il faut spécifier au logiciel quelle est la carte et où elle se trouve. Un cadre permet de choisir la carte, par exemple Arduino Uno et le bon port USB. En principe apparaît deux ports, le COM1 et celui sur lequel la carte est branchée. Comme on n'a qu'une carte, choisissez systématiquement le dernier port. Ces choix sont mémorisés, mais il faudra les refaire si vous changez de carte ou si vous changez de prise USB.

Le programme qui ne fait rien

Ce programme c'est celui que l'on a par défaut. Si vous l'avez perdu, faites fichier - Nouveau et vous en aurez un tout neuf. Ce programme fait le minimum, et pour nous ce sera ne rien faire. En réalité c'est impossible car un microcontrôleur est obligé de travailler si il est sous tension. Il va donc en réalité boucler sans arrêt. C'est un peu comme si vous exécutiez les ordres d'un livre qui contient une première page blanche et à la page 2 l'ordre recommence le livre au début. Vous allez à la page 1, puis 2, vous lisez l'ordre, vous allez donc à la page 1 puis 2, vous lisez l'ordre... et cela ne s'arrête pas. On cherchera à comprendre après. D'abord exécutons le!

Ce qui est écrit, c'est du C. C'est un langage adapté pour les humains. Il y a des mots en clair (pour celui qui parle anglais!). Ce n'est pas le langage du microcontrôleur qui est sur la carte. Il faudra donc transformer le C en langage machine. C'est le rôle du compilateur. Puis il va falloir envoyer le résultat de la compilation sur la carte (en fait dans le microcontrôleur). Les deux opérations se font en un clic par un ordre de téléversement.

Image: bouton téléversementEn cliquant sur le bouton téléversement, compilez et exécutez votre code. Les Leds repérées TX et RX doivent se mettre à clignoter, elle indique que la carte et le PC dialoguent. Mais à près cela il ne se passe rien. C'est normal, c'est ce que l'on a demandé.

Analyse de ce programme

Bien qu'il ne fasse rien, il servira de squelette pendant un certain temps. Regardons ce qu'il contient:

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

On a deux paquets qui se ressemblent, et pour expliquer, il y a dans chaque partie un commentaire. On reviendra plus tard sur ces commentaires, mais pour l'instant sachez que // ainsi que tout ce qu'il y a derrière est ignoré par la machine. C'est un cadeau pour nous. Le premier commentaire traduit donne:
    // Mettez votre code d'initialisation ici, il sera exécuté une fois
Le deuxième commentaire indique
    // Mettez ici votre code principal, il sera exécuté en boucle infinie
Comme on n'a rien mis ni dans l'un ni dans l'autre, il ne fait rien une fois, puis rien non plus sans arrêt (boucle = loop).

On enlèvera ces commentaires, Ils n'apportent rien, ils deviennent évidents au bout de quelques temps. On gardera pour les prochains exercices

void setup() {

}

void loop() {

}

setup et loop sont des fonctions, c'est un bloc de code. Vous connaissez la fonction racine carrée, c'est un peu pareil. On donne une ou plusieurs valeurs, on dit le nom de la fonction et on obtient un résultat. Les valeurs sont données entre parenthèses et dans le cas de nos deux fonctions, il n'y a rien. On ne donne pas de paramètres ni à setup ni à loop. Et le type de valeur retournée est indiqué dans le mot qui précède. void se traduit par vide, rien, indéfini, sans importance; ici il n'y a donc pas de valeur retournée. Donc pour ces deux fonctions on ne leur dit pas de l'extérieur ce sur quoi elle travaillent et ne donne pas de résultat. Appeler setup, c'est comme dire à quelqu'un fais ce que tu doit faire. On aurait pu (ou dû) écrire:

void setup(void)

pour insister sur le fait qu'on ne donne pas de paramètres du tout.

Suit enfin une paire d'accolade (une ouvrante et une fermante). C'est entre les deux qu'on y mettra les prochaines fois ce qui doit se faire une fois, et ce que doit se répéter infiniment. Aujourd'hui, on n'avait rien à dire.

Je prendrais souvent l'image qu'un programme est comme un livre avec des pages numérotées et ayant une instruction à chaque page. Et le microcontrôleur ne sachant pas faire des centaines de choses différentes, on a mis un nombre qui dit quelle instruction est à faire. Si c'était vous, vous auriez un dictionnaire:
0: ne rien faire
1: prendre l'objet qui est devant soi
2: avancer d'un pas
3: tourner à droite
4: mettre de l'eau dans l'objet
Si je veux vous faire faire des nouilles, il va falloir donner une suite de nombres (de tâches élémentaires). C'est notre programme.

Pour arrêter le programme

Tout à l'heure, j'ai dit que nous ne faisons rien une fois (setup) puis on répète à l'infini rien (loop). Mais comment arrêter le programme si on le voulait? C'est simple, on ne peut pas. Le microcontrôleur va lire les pages du livre et exécuter la tâche à faire, mais tant qu'il est sous tension il enchaînera les ordres. Si jamais on ne lui fixait pas d'ordres, il irait chercher dans sa mémoire (le livre) et exécutera ce qu'il y a. Il ferait alors n'importe quoi et on dirait qu'il est planté. Si c'était vous, vous jetteriez la casserole à la poubelle, vous mettriez de l'eau dans un objet que vous n'avez pas... C'est exactement comme votre ordinateur. Si vous fermez toutes les fenêtres actives et si vous ne touchez plus ni au clavier ni à la souris, l'ordinateur va continuer à faire un boucle d'attente, va remettre l'horloge à l'heure...