Bug bandeau LED et controlleur IR avec : irrecv.enableIRIn();

Bonjour,
Je me permets de vous écrire car j'ai réaliser un code pour mon arduino nano, un bandeau led RGB en 4 pins et un capteur IR avec une télécommande.
Pour activer la réception IR, il faut cette ligne de code : irrecv.enableIRIn(); mais lorsque que je l'ajoute dans ce programme :

#include <IRremote.h>

const int IR_PIN = 3; 
IRrecv irrecv(IR_PIN);
decode_results results;


// Définir le code de la télécommande comme une valeur numérique
const unsigned long code1 = 0x1270C;

const byte PIN_LED_R = 9;
const byte PIN_LED_G = 10;
const byte PIN_LED_B = 11;


void setup() {
  // EMPLACEMENT DU CODE POUR l'ACTIVATION RECEPION IR
  pinMode(PIN_LED_R, OUTPUT);
  pinMode(PIN_LED_G, OUTPUT);
  pinMode(PIN_LED_B, OUTPUT);
  displayColor(0, 0, 0);

}

void loop() {
  if (irrecv.decode(&results)) {
    // Comparer avec la valeur numérique
    if (code1 == results.value) {
      displayColor(255, 0, 0);
      delay(1000);
    }
    irrecv.resume();
  }
}

void displayColor(byte r, byte g, byte b) {
  analogWrite(PIN_LED_R, ~r);
  analogWrite(PIN_LED_G, ~g);
  analogWrite(PIN_LED_B, ~b);
}

Le bandeau s'initialise en bleu et reste en bleu, impossible de l'éteindre mais grâce à la télécommande il est possible de faire virer le bleu au violet. Alors que normalement il doit s'éteindre et rester éteint jusqu'à un bouton pressé via la télécommande.
Merci d'avance pour vos réponse.
Cordialement,
Norak

c'est étonnant, cela pourrait faire penser a un mauvais câblage.
pourquoi tu inverse(complément à 1) la valeur que tu donne en paramètre ?

Pourquoi "displayColor(255, 0, 0);" demanderais d'éteindre ton bandeau ?

Le displayColor(255, 0, 0); a pour but d’allumer le bandeau en rouge lorsque le bouton de la télécommande est pressé et par contre je ne comprends pas la question en rapport avec une inversion des valeurs.

Bonsoir norak74

Pourquoi les tilde avant la couleur comme ~r, tu as essayé sans?

Cordialement
jpbbricole

Dans ce cas où est le code qui est censé éteindre ton bandeau?

Comme te l'indique @jpbbricole, si tu utilise une complétion à 1, lorsque ton paramètre vaut 0, le analogWrite(PIN_LED_R, ~0) est équivalant à analogWrite(PIN_LED_R, 255)
Pourquoi faire ça?

Bonjour, j'ai utilisé le signe ~ car j'ai récupéré un code qui permettait de changer le bandeau led de couleur :

/*
 * Code d'exemple pour une LED RGB (+16 millions de couleurs).
 */

/* Broches */
const byte PIN_LED_R = 9;
const byte PIN_LED_G = 10;
const byte PIN_LED_B = 11;

// Fonction setup(), appelée au démarrage de la carte Arduino
void setup() {

  // Initialise les broches
  pinMode(PIN_LED_R, OUTPUT);
  pinMode(PIN_LED_G, OUTPUT);
  pinMode(PIN_LED_B, OUTPUT);
  displayColor(0, 0, 0);
}

// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop() {
  
  /* Code de démonstration */
  displayColor(255, 0, 0);
  delay(1000);
  
  displayColor(0, 255, 0);
  delay(1000);
  
  displayColor(0, 0, 255);
  delay(1000);
  
  displayColor(255, 0, 255);
  delay(1000);
  
  displayColor(0, 255, 255);
  delay(1000);
  
  displayColor(255, 255, 0);
  delay(1000);
  
  displayColor(255, 255, 255);
  delay(1000);
  
  displayColor(0, 0, 0);
  delay(1000);
}

/** Affiche une couleur */
void displayColor(byte r, byte g, byte b) {

  // Assigne l'état des broches
  // Version cathode commune
  //analogWrite(PIN_LED_R, r);
  //analogWrite(PIN_LED_G, g);
  //analogWrite(PIN_LED_B, b);
  // Version anode commune
  analogWrite(PIN_LED_R, ~r);
  analogWrite(PIN_LED_G, ~g);
  analogWrite(PIN_LED_B, ~b);
}

Et sans au lieu d'être bleu le bandeau devient couleur cyan.

Le bandeau est censé s'éteindre au début dans le void setup :

void setup() {
  // EMPLACEMENT CODE ACTIVATION RECEPION IR
  pinMode(PIN_LED_R, OUTPUT);
  pinMode(PIN_LED_G, OUTPUT);
  pinMode(PIN_LED_B, OUTPUT);
  displayColor(0, 0, 0);

}

Mais il ne le fait pas et reste allumé.

Bonsoir norak74

J'ai essayé ton programme, avec 3 LED, je n'ai pas de LED RGB et, mise à part ces tildes en trop, ça fonctionne très bien.
Ta LED RGB est anode ou cathode commune? Mets un lien sur le produit.

A+
Cordialement
jpbbricole

As tu vérifier que ta LED était à cathode commune?

Est donc Bleu c'est mieux que Cyan ?

As tu vérifier ce que je t'ai indiqué au post #2?

Donc, il y a quelque chose qui ne va pas dans ton programme ou ton montage!

Comment puis-je savoir si ma led est anode ou cathode et qu'est que ça veut dire (je suis assez débutant).

Je n'ai pas compris votre post #2 par rapport à la valeur en paramètre.
Et je ne sais pas si ma LED est cathode commune ni se que ça veut dire donc si vous avez des explications je suis preneur.
Et je voudrais que le bandeau LED s’éteigne au lieu d'être cyan et de le rester.

Où l'as-tu achetée, donnes un lien.

Dans ce post, je t'indique que tu as peut être un problème de câblage, as tu regardé?
pour le reste @jpbbricole t'a pourtant expliquer ce que cela voulais dire.

pour l'explication je te laisse regarder sur internet.
une LED RGB est un regroupement de 3led (rouge, vert, bleu).
une LED est une diode électroluminescence, comme toutes diode, chacune on une anode et une cathode.
Du coup cathode commune, indique que les 3 LED se partage la même broche pour leur cathode.
l'autre possibilité est d'avoir leur anode commun.

Si tu ne sais pas comment il faut brancher ta LED, la seul solution est d'expérimenter.
Ce que tu as fait puisque tu as constaté que ta LED ne s'éteignait pas au setup et mais tout les LED ne s'éclaire pas de la même façon, donc le problème n'est pas uniquement le branchement en cathode ou anode commun.
Si tu prend ta LED bleu qui d'éclaire quand tu donne 0 et que tu as inversé avec le ~.
Cela veut dire que tu demande à l'Arduino, d'appliquer 5V en permanence sur la broche de la LED.
Donc je crois que tu dois avoir une LED en anode commune

Mais comme tu ne nous donne pas ton schéma de montage, cela reste très hypothétique.

Bonjour

Pour anode commune:
image

	analogWrite(PIN_LED_R, ~r);
	analogWrite(PIN_LED_G, ~g);
	analogWrite(PIN_LED_B, ~b);

Pour cathode commune:
image

	analogWrite(PIN_LED_R, r);
	analogWrite(PIN_LED_G, g);
	analogWrite(PIN_LED_B, b);

Cordialement
jpbbricole

Merci et non je ne possède pas le lien car je les aient récupérés à un copain


Voici un dessin de mon schéma

Tu l'as donc branché en anode commune.
Donc pour éteindre, il faut donner le même voltage aux cathodes indépendantes que ton anode commune (5V), comme tu utilises une inversion(~), il faut bien envoyé 0.

Si ce n'est pas le cas ou si uniquement certaines LED s'allume, soit le câblage n'est pas bon, soit la broche que tu utilise n'est pas PWM.
Je ne suis pas spécialiste des nano, mais je crois que normalement les broches 9,10,11 sont en PWM, mais la carte en photo, semble indiquer que la broche 11 n'est pas en PWM.

Bonjour norak74

Tu as combien de LED sur ton bandeau?
Si tu alimentes le tout pas la connexion USB du Nano, il y a de fortes chances que tu n'aies pas assez de courant et que tu doives mettre une alimentation 5V. externe.

Cordialement
jpbbricole

Je possède 15 LED et oui plus tard il est prévue de mettre une alim en plus c'est juste que pour le moment je n'ai pas mise pour éviter de souder puis de dessouder si je dois changer un composant

J'ai vérifié et oui les 9,10,11 sont en PWM et je pense que mon câblage est bon car tout fonctionne individuellement