Bonjour à tous,
J'aimerai vous exposer mon problème et les solutions que j'ai trouvées, elles pourront servir à de futurs bricoleurs qui rencontreront ce souci. Le problème était le suivant : je commande un ruban LED RGB via un capteur IR, une arduino UNO et une télécommande, j'utilise la librairie IRremote.
Or, j'avais mis en pin 9, 10 et 11 pour les leds R, G, B. Et bizarrement, le PWM de la pin Bleu (pin11) ne fonctionnait pas : avec un AnalogWrite(), je ne pouvais pas renseigner de valeurs inférieure à 100 (0 exclu) (exemple : AnalgoWrite(pin11,35) pour du turquoise). La télécommande recevait 1 seule fois la commande, puis affichait des codes HEX inconnus, avec une impossibilité de revenir en arrière - le programme était comme bloqué.
L'origine du problème vient des TIMERs utilisés par la librairie, si vous avez la version la plus récente vous allez dans Documents>Arduino>Librairies>I Rremote>boarddefs.h (à ouvrir avec wordpad ou txt).
Vous faites défiler et vous tombez sur :
// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, Nano, etc
// ATmega48, ATmega88, ATmega168, ATmega328
//#define IR_USE_TIMER1 // tx = pin 9 <-------- En écriture simple
#define IR_USE_TIMER2 // tx = pin 3 <-------- Activé
En d'autres termes, le PWM ne peut pas fonctionner sur les pins du TIMER (TIMER1 pour pins 9 et 10 ; TIMER2 pour pin 3 et 11), donc l'analogWrite ne fonctionnera que si vous renseignez théoriquement 0 ou 255.
J'ai trouvé 2 possibilités :
- la première c'est de sélectionner son TIMER via ce fichier en mettant // devant #define de la ligne du TIMER que l'on ne veut pas utiliser (dans le cas ci-dessus ce sont les pins 3 et 11 qui seront inutilisables en PWM), et en effaçant les // de l'autre #define
- la deuxième c'est d'utiliser d'autres pins PWM pour son projet (autre que le 3 ou 11 si le TIMER2 est choisi comme ci-dessus)
Dans mon cas, j'ai utilisé la pin6 pour la led bleue, et tout fonctionne nickel ! J'ai passé la matinée à chercher la solution (que j'ai trouvé sur des forums anglophones), donc j'espère que ça servira à d'autres, qui rencontreront le même problème sur des commandes PWM en général (moteurs etc).
![]()
-----