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