Télécommande IR

Bonjour à tous,

Retraité et débutant, je me démène comme un beau diable à trouver mon erreur dans un code que j'ai modifié afin de faire:

  • Allumer une led verte quand j'appuie sur le bouton contact de la télécommande infra-rouge
    avec affichage sur le moniteur série de "touche ---> marche et de "led verte allumée"

  • D'éteindre la led verte et d'allumer une led rouge quand j'appuie une seconde fois sur le même bouton de la télécommande.

  • affichage sur le moniteur série de "touche--->Arrêt" et "led rouge allumée".

Le ou les problèmes doit se situer dans les conditions mais je ne trouve pas.

Il doit y avoir une boulette énorme que je ne vois pas.
Une petite explication serait la bien venue.

Cordialement

void loop() {
  
  if (monRecepteurInfraRouge.decode(&messageRecu))
  {
    
    if (messageRecu.value == 0xFF02FD)
  { Serial.println ("Touche ---> Marche.");
    digitalWrite (ledVerte,HIGH);
    Serial.println ("Led verte allumee."); 
  }
    
    if (messageRecu.value == 0xFF02FD && ledVerte == HIGH)
  { 
    Serial.println ("Touche ---> Arret.");
    digitalWrite (ledVerte,LOW);
    digitalWrite (ledRouge,HIGH);
    Serial.println ("Led rouge allumee."); 
  }
    delay (500);  
   
    monRecepteurInfraRouge.resume();
  }
    delay(1);
  }

Hello,

A lire ton code, il semble que ledVerte est le numéro de pin de la Led Verte.
Dans ce cas, ton deuxième test devrait être du genre

if (messageRecu.value == 0xFF02FD && (digitalRead(ledVerte) == HIGH))

Ou quelque chose d'approchant...

Coyotte

Bonjour,

Il faut aussi tester que l'état de la led verte soit à LOW dans le premier cas, ce qui donne

void loop() {

  if (monRecepteurInfraRouge.decode(&messageRecu))
  {

    if (messageRecu.value == 0xFF02FD && digitalRead(ledVerte)==LOW)
    { Serial.println ("Touche ---> Marche.");
      digitalWrite (ledVerte, HIGH);
      Serial.println ("Led verte allumee.");
    }

    else if (messageRecu.value == 0xFF02FD && digitalRead(ledVerte) == HIGH)
    {
      Serial.println ("Touche ---> Arret.");
      digitalWrite (ledVerte, LOW);
      digitalWrite (ledRouge, HIGH);
      Serial.println ("Led rouge allumee.");
    }
    delay (500);

    monRecepteurInfraRouge.resume();
  }
  delay(1);
}

Remarques:

  • on peut simplifier
  • la led rouge ne s'éteint jamais. C'est voulu?

Bonjour,

Un grand merci à coyotte, et un énorme merci à toi Kamill d'avoir modifié mon code.
Sans vous, je n'aurais jamais trouvé.

ça marche du tonnerre ! ! !

Pour répondre à ta question Kamill.
Si la led rouge doit s'éteindre. J'ai rajouté: digitalWrite (ledRouge, LOW);
dans la première condition et ça marche pile poil. :wink:

Encore merci pour votre précieuse aide.

Cordialement