Il y a une question qui revient assez souvent chez les utilisateurs de Yocto-Color et de Yocto-PowerColor: est-il possible de faire clignoter de manière autonome les led RGB de ces deux modules ? Cela n'a rien de délirant, quand on voit ce qu'un relais Yoctopuce est capable de faire, on est en droit de s'attendre à des fonctions similaires avec une Led RGB proposée par Yoctopuce.
A vrai dire, cette histoire de clignotement traîne dans nos tiroirs depuis longtemps. On aurait aimé faire quelque chose d'aussi pratique et confortable que le concept d'animations-d'arrière plan qu'on trouve dans les écrans Yoctopuce. Malheureusement le processeur utilisé dans le Yocto-Color et le Yocto-PowerColor n'a pas assez de mémoire pour se permettre quelque chose d'aussi luxueux.
Un Yocto-Color et un Yocto-MiniDisplay: observez la différence de processeur
D'un autre coté, on ne voulait pas se contenter d'offrir une simple fonctionnalité allumé/éteint qui aurait été très limitative pour une led RGB. Alors on a opté pour une solution intermédiaire.
Fonctionnement
Le dernier firmware pour le Yocto-Color et le Yocto-PowerColor introduit une notion de séquence. Une séquence est une suite de transitions qui sont effectuées en un temps donné: par exemple passer au rouge en une seconde puis au noir en une seconde. Ainsi pour faire varier une led Yoctopuce automatiquement, il vous suffit programmer ces deux transitions puis de demander au module d'exécuter cette séquence. Voici un petit exemple en ligne de commande.
C:\>ycolorled any addRgbMoveToBlinkSeq 0xFF0000 1000 OK: YRGBLED1-00164.colorLed2.addRgbMoveToBlinkSeq = 16711680 1000. C:\>ycolorled any addRgbMoveToBlinkSeq 0x000000 1000 OK: YRGBLED1-00164.colorLed2.addRgbMoveToBlinkSeq = 0 1000. C:\>ycolorled any startBlinkSeq OK: YRGBLED1-00164.colorLed2.startBlinkSeq = .
L'exécution de cette séquence se fera en boucle jusqu'à ce qu'on l'arrête explicitement, qu'on change la couleur de la led, ou encore qu'on efface la séquence avec resetBlinkSeq.
C:\>ycolorled any stopBlinkSeq OK: YRGBLED1-00164.colorLed2.startBlinkSeq = . C:\>ycolorled any resetBlinkSeq OK: YRGBLED1-00164.colorLed2.resetBlinkSeq = .
Dans l'exemple qu'on vient de voir, les transitions entre le rouge et le noir se font progressivement. Comment faire pour que les transitions se fasse de manière instantanée? C'est légèrement plus compliqué, il faut deux fois plus de transitions. Une avec un temps nul, et une seconde avec le temps pendant lequel on désire que la couleur reste constante.
C:\>ycolorled any addRgbMoveToBlinkSeq 0xFF0000 0 OK: YRGBLED1-00164.colorLed2.addRgbMoveToBlinkSeq = 16711680 0. C:\>ycolorled any addRgbMoveToBlinkSeq 0xFF0000 1000 OK: YRGBLED1-00164.colorLed2.addRgbMoveToBlinkSeq = 16711680 1000. C:\>ycolorled any addRgbMoveToBlinkSeq 0x000000 0 OK: YRGBLED1-00164.colorLed2.addRgbMoveToBlinkSeq = 0 0. C:\>ycolorled any addRgbMoveToBlinkSeq 0x000000 1000 OK: YRGBLED1-00164.colorLed2.addRgbMoveToBlinkSeq = 0 1000.
Effectivement, cette méthode de programmation basée sur des transitions rend les choses simples un peu plus compliquées que les choses compliquées :-). En revanche, elle offre un éventail de possibilités incroyable: à vous les séquences "Saturday night fever". Voici une petite vidéo qui illustre quelques-unes de ces possibilités.
Limitations
Si on compare avec les animations d'arrière-plan que l'on trouve sur les écrans Yoctopuce, il y a quelques limitations, essentiellement dues au peu de mémoire disponible sur le Yocto-Color et le Yocto-PowerColor.
- Une séquence est limitée à 32 transitions.
- Une seule séquence par led à la fois.
- La séquence est stockée dans la mémoire vive du module, s'il est débranché, la séquence disparaît.
Conclusion
Voilà vous savez tout, on espère que cette nouvelle fonctionnalité vous comblera. Si vous souhaitez la tester, n'oubliez de récupérer la dernière version du firmware de votre Yocto-(Power)Color et la dernière version l'API correspondant à votre langage de programmation préféré.