Page 104 - arduino_Neat
P. 104
Lorsque nous copions ce programme, le compilons et l'exécutons, il ne fonctionne pas comme
prévu ! Il contient délibérément un erreur. Même si le moniteur affiche une valeur différente de
5 pour le capteur, il affiche « test réussi ». Pourquoi ? Analysons le problème. Nous pouvons
être suffisamment certains que la valeur du capteur est bien lue, et qu'elle module en fonction
des manipulations physiques que nous ferions sur celui-ci. Si ce n'était pas le cas, le problème
résiderait alors dans le capteur lui-même ou la connexion entre la carte Arduino et le capteur,
mais comme dans le cadre de cette simulation, la valeur du capteur est représentative du
phénomène physique, notre problème se situe ailleurs.
Quelles instructions suivent celui de l'affichage de la valeur du capteur ? L'énoncé conditionnel if
(valeurCapteur=5). Nous pouvons être suffisamment certains que la valeur du capteur n'est pas
5 en observant le moniteur sériel, mais, tout de même, la condition semble réalisée puisqu'il
affiche « test réussi ». Comme aucune autre instruction ne modifie valeurCapteur, il doit
forcément y avoir quelque chose qui cloche avec la fonction if(). Si vous êtes incapable de
trouver quoi, une bonne pratique est de se référer à l'aide offerte par le programme (Help >
Reference) (ou Ctrl+Maj+F en surlignant le mot clef recherché) afin de valider la bonne utilisation
de la fonction, la syntaxe, etc. En observant la condition valeurCapteur=5, nous observons ainsi
que nous nous sommes trompé d'opérateur ! Un « = » attribue la valeur à la variable qui se
trouve à sa gauche. L'opérateur que nous aurions dû utiliser devrait plutôt être « == », qui
retourne un vrai si les deux valeurs comparées sont équivalentes et un faux si elles ne le sont
pas. Comme notre condition était une assignation, elle ne retournait pas faux et entraînait
l'exécution des instructions comprises dans le if().
Que doit-on retenir de cet exemple ?
Lorsqu'on débugge un programme, il faut toujours avoir une approche modulaire, c'est-à-dire
aborder chaque élément du code ou du circuit indépendamment des autres et s'assurer de son
bon fonctionnement. Cette vérification doit également être faite de manière séquentielle, ou
en ordre. On part soit de l'élément physique, pour remonter vers le circuit, puis vers l'Arduino,
puis vers le programme. Ou l'inverse. Un autre exemple :
Un capteur contrôle l'activation d'un moteur. Rien ne marche ! Docteur, que faire ?
Vérifier que le capteur ne soit pas physiquement endommagé.
Vérifier que le capteur soit bien connecté à son circuit.
Vérifier que tous les composants du circuit soit bien connectés.
Vérifier que la connexion au Arduino est bonne.
Vérifier que la donnée est bien lue et l'afficher dans le moniteur.
Vérifier les manipulations qui sont faites sur les variables ou la valeur du capteur.
Vérifier que ces valeurs sont envoyées correctement au moteur.
Vérifier que le moteur est bien connecté et non endommagé.
À travers toutes ces étapes, il est possible de tester hors du contexte du programme les
éléments. Par exemple, pour tester que le moteur répond bien, il est possible de créer un
nouveau petit programme temporaire pour ne tester que le moteur. Souvent, utiliser des
exemples fournis dans le menu File ou le menu Help est utile, puisque ces exemples ne
contiennent pas d'erreur en théorie.
En électronique
Le même principe s'applique en électronique et avec l'électricité. Analyser chaque circuit, ou
chaque partie de circuit, ou chaque composant, de manière modulaire nous permettra
d’identifier un composant grillé, un circuit mal configuré, etc. tout en prenant soin d'avoir
d'abord vérifié que notre source d'alimentation est d'abord sous tension ! L'outil par excellence
pour débugger est bien évidemment le multimètre (voir chapitre « Les bases de
l'électronique »).
104