Transmission d'informations par infrarouges pas stable

Bonjour à tous !

J’ai le projet de faire un robot télécommander par infrarouges avec un émetteur et un récepteur infrarouges grove. Je commence donc par allumer une led à distance avec un bouton poussoir relié à ma première carte et une led relié sur ma deuxième carte, ces deux cartes étant en communication par infrarouge.

Voilà mon code pour émettre le signal :

#include <IRremote.h>

const int bp = 4;

IRsend irsend;

void setup()
{
    pinMode(bp, INPUT);
    Serial.begin(9600);
}
void loop() {
  if (digitalRead(bp) == HIGH) {
    irsend.sendSony (0x68B92, 20);
    delay(50);
  }
}

Et voici le code pour recevoir :

#include <IRremote.h>
const int irReceiverPin = 3;
const int ledPin = 9; 
IRrecv irrecv(irReceiverPin);
decode_results resultat;

void setup()
{
    pinMode(ledPin, OUTPUT);
    irrecv.enableIRIn();
    //irrecv.blink13(true);
    Serial.begin(9600);
}


void loop()
{
    if (irrecv.decode(&resultat) == true)
    {
      if (resultat.value == 0x68B92){
        digitalWrite(ledPin, HIGH);
        Serial.println("allumer la led");
        
      }
        delay(500);
        digitalWrite(ledPin, LOW);
        Serial.println("eteindre la led");
      irrecv.resume();
       }
       delay(1);
   
    
}

Les programmes marchent parfaitement mais le problème, c’est que je m’aperçois que après 500ms où la led est allumé (due au delay de 500 que j’ai mis), il y a une microcoupure de ~20ms avant de rallumer la led.

J’ai déjà tester de retirer le delay de 500ms mais cela est encore pire ! Il fais des microcoupures à chaque 50ms qui correspond au délais de transmission d’un seul signal (mon 0x68B92).

Pour une led, ce n’est pas très important me dirais-vous, mais le problème c’est que je souhaite commander des moteur avec ce moyens de transmission d’infrarouges donc si il y a des microcoupures de 20ms toutes les 50ms quand je piloterais mon robot, premièrement les moteurs risquent de ne pas aimer, et deuxièmement je pense que ça ne sera pas très agréable à piloter.

Je vous demande donc s’il est possible de supprimer ces microcoupures ??
Merci d’avance,
Cordialement.

AntoineB

Je viens de résoudre mon problème !
Pour ceux qui ont le même problème, il y a une solution très simple :
il suffit de rajouter que quand le bouton poussoir est relâché, il envois un autre signal différent du précédent, ainsi le récepteur, quand il reçoit cet autre signal éteint la led.
Le nouveau code ressemble donc à cela pour l’émetteur :

#include <IRremote.h>

const int bp = 4;

IRsend irsend;

void setup()
{
    pinMode(bp, INPUT);
    Serial.begin(9600);
}
void loop() {
  if (digitalRead(bp) == HIGH) {
    irsend.sendSony (0x68B92, 20);
    delay(50);
  }
  else {
    irsend.sendSony (0x69B93, 20);
    delay(50);
  }
}

et pour le récepteur :

#include <IRremote.h>
const int irReceiverPin = 3;
const int ledPin = 9; 
IRrecv irrecv(irReceiverPin);
decode_results resultat;

void setup()
{
    pinMode(ledPin, OUTPUT);
    irrecv.enableIRIn();
    //irrecv.blink13(true);
    Serial.begin(9600);
}


void loop()
{
    if (irrecv.decode(&resultat) == true)
    {
      if (resultat.value == 0x68B92){
        digitalWrite(ledPin, HIGH);
        Serial.println("allumer la led");
      }
      if (resultat.value == 0x69B93){
        digitalWrite(ledPin, LOW);
        Serial.println("eteindre la led");
      }
      
      irrecv.resume();
       }
      delay(1);
   
    
}