problème code pour emetteur récepteur

Bonjour,

J'ai acheté un émetteur et récepteur et j'ai suivi ce site.
Pas de problème tout marche, j'allume à distance les deux leds et je les éteints
Le problème et que je voulais 4 led, j'ai donc fait le programme ci-joint mais les deux leds A et B marchent et pas les autres.
Le problème vient du code mais je n'arrive pas à voir ou, si quelqu'un a une idée ? merci d'avance

pour le recepteur

/**
   Exemple de code pour la bibliothèque VirtualWire – Télécommande DIY (récepteur)
*/

#include <VirtualWire.h>

/** Broches pour les LEDs */
const byte PIN_LED_A = 2;
const byte PIN_LED_B = 3;
const byte PIN_LED_C = 4;
const byte PIN_LED_D = 5;

/** Différents messages de commande */
const char* CMD_BUTTON_A = "BPA";
const char* CMD_BUTTON_B = "BPB";
const char* CMD_BUTTON_C = "CCC";
const char* CMD_BUTTON_D = "DDD";

void setup() {
  Serial.begin(9600);

  /* Met les broches des LEDs en sortie et à LOW */
  pinMode(PIN_LED_A, OUTPUT);
  digitalWrite(PIN_LED_A, LOW);
  pinMode(PIN_LED_B, OUTPUT);
  digitalWrite(PIN_LED_B, LOW);
  pinMode(PIN_LED_C, OUTPUT);
  digitalWrite(PIN_LED_C, LOW);
  pinMode(PIN_LED_D, OUTPUT);
  digitalWrite(PIN_LED_D, LOW);
  // Initialisation de la bibliothèque VirtualWire
  // Vous pouvez changez les broches RX/TX/PTT avant vw_setup() si nécessaire
  vw_setup(2000);
  vw_rx_start(); // On peut maintenant recevoir des messages

  Serial.println("Go !");
}

void loop() {
  byte message[VW_MAX_MESSAGE_LEN];
  byte taille_message = VW_MAX_MESSAGE_LEN;
  // N.B. La constante VW_MAX_MESSAGE_LEN est fournie par la lib VirtualWire

  /*
    La variable "taille_message" doit impérativement être remise à
    la taille du buffer avant de pouvoir recevoir un message.
    Le plus simple est d'utiliser une variable locale pour ne pas
    avoir à réassigner la valeur à chaque début de loop().
  */

  // On attend de recevoir un message
  vw_wait_rx();

  if (vw_get_message(message, &taille_message)) {
    // On copie le message, qu'il soit corrompu ou non

    if (strcmp((char*) message, CMD_BUTTON_A) == 0) {
      digitalWrite(PIN_LED_A, !digitalRead(PIN_LED_A));
      Serial.println("TOGGLE LED A");

    }
    if (strcmp((char*) message, CMD_BUTTON_B) == 0) {
      digitalWrite(PIN_LED_B, !digitalRead(PIN_LED_B));
      Serial.println("TOGGLE LED B");

    }
    if (strcmp((char*) message, CMD_BUTTON_C) == 0) {
      digitalWrite(PIN_LED_C, !digitalRead(PIN_LED_C));
      Serial.println("TOGGLE LED C");

    }

    else if (strcmp((char*) message, CMD_BUTTON_D) == 0) {
      digitalWrite(PIN_LED_D, !digitalRead(PIN_LED_D));
      Serial.println("TOGGLE LED D");
    }
  }
}

emetteur

/**
   Exemple de code pour la bibliothèque VirtualWire – Télécommande DIY (émetteur)
*/

#include <VirtualWire.h>

/** Broches pour les boutons */
const byte PIN_BUTTON_A = 2;
const byte PIN_BUTTON_B = 3;
const byte PIN_BUTTON_C = 4;
const byte PIN_BUTTON_D = 5;

/** Différents messages de commande */
const char* CMD_BUTTON_A = "BPA";
const char* CMD_BUTTON_B = "BPB";
const char* CMD_BUTTON_C = "CCC";
const char* CMD_BUTTON_D = "DDD";

void setup() {
  Serial.begin(9600);

  /* Met les broches des boutons en entrées avec pull-up */
  pinMode(PIN_BUTTON_A, INPUT_PULLUP);
  pinMode(PIN_BUTTON_B, INPUT_PULLUP);
  pinMode(PIN_BUTTON_C, INPUT_PULLUP);
  pinMode(PIN_BUTTON_D, INPUT_PULLUP);

  // Initialisation de la bibliothèque VirtualWire
  // Vous pouvez changez les broches RX/TX/PTT avant vw_setup() si nécessaire
  vw_setup(2000);

  Serial.println("Go !");
}

void loop() {
  byte message[VW_MAX_MESSAGE_LEN];
  // N.B. La constante VW_MAX_MESSAGE_LEN est fournie par la lib VirtualWire

  /* Envoi la commande adéquate */
  if (digitalRead(PIN_BUTTON_A) == LOW ) {

    vw_send((byte*) CMD_BUTTON_A, strlen(CMD_BUTTON_A) + 1); // On envoie le message
    vw_wait_tx(); // On attend la fin de l'envoi

    delay(50); // Attend que le bouton soit relâché
    while (digitalRead(PIN_BUTTON_A) == LOW);
    delay(50);
  }

  if (digitalRead(PIN_BUTTON_B) == LOW ) {

    vw_send((byte*) CMD_BUTTON_B, strlen(CMD_BUTTON_B) + 1); // On envoie le message
    vw_wait_tx(); // On attend la fin de l'envoi

    delay(50); // Attend que le bouton soit relâché
    while (digitalRead(PIN_BUTTON_B) == LOW);
    delay(50);

  }

  if (digitalRead(PIN_BUTTON_C) == LOW ) {

    vw_send((byte*) CMD_BUTTON_C, strlen(CMD_BUTTON_C) + 1); // On envoie le message
    vw_wait_tx(); // On attend la fin de l'envoi

    delay(50); // Attend que le bouton soit relâché
    while (digitalRead(PIN_BUTTON_C) == LOW);
    delay(50);

  }

  else if (digitalRead(PIN_BUTTON_D) == LOW) {

    vw_send((byte*) CMD_BUTTON_D, strlen(CMD_BUTTON_D) + 1); // On envoie le message
    vw_wait_tx(); // On attend la fin de l'envoi

    delay(50); // Attend que le bouton soit relâché
    while (digitalRead(PIN_BUTTON_D) == LOW);
    delay(50);
  }
}

bonne soirée

A première vue, rien qui explique que ça ne fonctionne pas sur les LED C & D.
Ajoute un Serial.println(message); dans le code du récepteur avant les tests pour voir s'il y a un problème avec les messages des boutons C & D.
Sinon, c'est peut-être un problème de connexion ?

C'est bon ça marche
merci !

bonne journée