Après une revue théorique des capacités de la bibliothèque, passons à des travaux pratiques.
Un décodeur d’accessoires universel
Un décodeur d’accessoires universel (2)
.
Par :
DIFFICULTÉ :★★☆
La bibliothèque
Le plus simple pour l’installer est de la télécharger. et d’utiliser l’option ’Add library’ (cette option là n’est pas traduite dans mon IDE 1.0 !) du menu ’Croquis/Importer Bibliothèque’ . Voir l’article idoine pour installer une bibliothèque.
Comme toutes les bibliothèques Arduino, les fichiers sont livrés et installés directement utilisables. Mais comme la mise au point d’un programme peut être fastidieuse, il y a des moyens pour chercher à comprendre ce qui ne marche pas.
Dans le fichier UniversalAccessoryDecoder.h de la bibliothèque, vous pouvez déclarer le DEBUG_MODE
en retirant le //
au début de la ligne #define DEBUG_MODE
. Lorsque vous êtes en debug (déverminage en français franchouillard), c’est à dire lorsque vous en êtes encore à la phase de mise au point de votre programme, la bibliothèque envoie des infos sur son fonctionnement sur la console série, alors prenez garde de l’ouvrir. Elle est configurée par la librairie à 115200 Bauds.. Elle vérifie également que ce que vous demandez d’actionner existe bien, qu’il est bien déclaré (mauvais numéro de port, de broche Arduino) et sortira des messages d’erreur si quelque chose ne va pas. Une fois le programme au point, remettez les deux slash //
devant la ligne pour enlever tous les tests et tous les messages sur la console. Cela rendra le programme bien plus rapide et moins encombrant. En mode debug, vous pouvez en plus activer DEBUG_VERBOSE_MODE
qui est encore plus bavard, je dirais verbeux, et qui vous abreuvera d’informations plus fines et plus précises. Toujours en mode Debug, nouveauté 4.0, la led liée à la pin 13 de l’Arduino clignotera si un signal DCC est bien présent. Utile pour vérifier que votre petit montage DCC en amont marche bien...
////////////////////////////////////////////////////////
// Add a '//' at the beginning of the line to be in
// release mode.
#define DEBUG_MODE
///////////////////////////////////////////////////////
// Verbose mode lets you see all actions done by the
// library, but with a real flood of text to console...
// Has no effect if DEBUG_MODE is not activated.
//#define DEBUG_VERBOSE_MODE
Exemple ’Full’
Dans la bibliothèque sont livrés plusieurs exemples. Prenons-en un pour voir comment ça marche. Full est l’un des plus complets. Voici son schéma :
On veut piloter ce qui est présent dans la colonne de droite : deux servos et trois leds de couleur. Pour les commander individuellement, on doit leur donner à chacun des codes DCC.
Le premier servo sera commandé par un seul code DCC 316/0. Ce qui signifie que chaque fois que ce code sera utilisé, le servo changera d’état et basculera de sa position mini à sa position maxi ou l’inverse. Le port servo 0 sera utilisé avec la pin 2 de l’Arduino.
Le second servo dispose lui de quatre positions, commandées par quatre codes DCC : 314/0 314/1 pour les mini/maxi, et 315/0 315/1 pour les positions intermédiaires 45 et 135°. Le port servo 1 sera utilisé avec la pin 3 de l’Arduino.
Les leds sont commandées individuellement par les codes DCC 1/0 1/1 et 2/0. Les deux premières leds sont configurées pour du fading. Chaque led utilise un port moteur/lumière avec les pins 9 10 et 11.
Des groupes sont également définis en bas du graphique. Un premier groupe de servos à gauche pour les déplacer en séquence, avec deux codes DCC 320/0 et 320/1, chacun correspondant à des positions de chaque servo. Le mouvement non simultané est donné par un argument du constructeur du groupe, à voir plus bas. Puis le second groupe de leds qui utilise deux codes DCC 319/0 et 319/1 pour changer l’état des trois leds simultanément, comme pour un feu de signalisation.
Enfin tout ça est pilotable par le DCC, mais aussi par des boutons représentés par les ronds blancs tout à gauche. Un bouton, quelque soit sa forme, ne fait qu’envoyer un code DCC à la bibliothèque, comme si ce code avait été reçu via le Commander DCC. L’exception, parce qu’il en faut une, c’est le potentiomètre qui en plus donne sa position courante.
Le premier rond blanc en haut est un bouton poussoir connecté à la pin 26 de l’Arduino. Lorsqu’un poussoir est pressé, il passe de son code DCC actuel au suivant. Ici deux sont définis : 320/0 et 320/1, qui correspondent au groupe de servos.
Le deuxième est un switch connecté aux pins 24 et 25. Lorsque la pin 24 est activée par le switch, le code DCC 319/0 est envoyé. La pin 25 appelle le code 319/1. Il change donc l’état du groupe de leds.
Le potentiomètre n’est relié à rien dans cet exemple. Il envoie un code DCC 321/0 qui n’est pas attaché à un accessoire ou un groupe. C’est volontaire. Si l’on voulait par exemple déplacer le servo 2 selon la position du potentiomètre, il suffirait de mettre 314/0 ou 1, ou même 315/0 ou 1. Pour un potentiomètre, le code DCC ne sert qu’a identifier l’accessoire à déplacer. Ensuite un ordre de mouvement est directement envoyé à l’accessoire en utilisant la position courante du potentiomètre. Dans Full, cette valeur serait contredite par les ordres DCC et/ou les boutons. Ce qui bouge de manière continue avec une position quelconque n’est pas compatible avec des ordres fixes. Voilà pourquoi ce potentiomètre ne pointe vers rien. Il est là pour l’exemple...
La suite, pour comprendre le détail de ’full.ino’, dans le prochain article.