Bonjour, je cherche en ce moment à activer un relais via un kit d’émetteur récepteur 433Mhz.
Je rencontre actuellement des difficultés pour la communication entre l'émetteur et le récepteur.
Le but est simple : Quand j'appuie sur un bouton(simple bouton poussoir), une "trame" est envoyé afin d'activer le relais à distance.
Je dispose donc d'un Arduino Uno + émetteur + bouton et de l'autre coté un Arduino Mega + le récepteur + le relais.
Je cherche donc de l'aide pour résoudre mon problème.
Le problème étant que cela ne fonctionne pas vraiment ^^
Code de l'émetteur :
Code du récepteur :Code:#include <VirtualWire.h> // Vous devez télécharger et installer la librairie VirtualWire.h dans votre dossier "/libraries" ! #define B_POUSSOIR 11 #define RELAIS 5 int memoireBp = LOW; //Mémoire du bouton poussoir int etatBp = LOW; //Etat actuel du PB int etatRelais = LOW; //Etat du relais void setup() { Serial.begin(9600); vw_setup(2000); // Bits par seconde (vous pouvez le modifier mais cela modifiera la portée). Voir la documentation de la librairie VirtualWire. vw_set_tx_pin(12); // La broche 3 sera utilisée pour transmettre la DATA, vous pouvez changez de broche si vous le désirez. pinMode(B_POUSSOIR,INPUT); pinMode(RELAIS, OUTPUT); digitalWrite(RELAIS, etatRelais); //On écrit l'état du relais Serial.println("1"); } void loop() { etatBp = digitalRead(B_POUSSOIR); if(etatBp != memoireBp && etatBp == HIGH) { //On inverse l'état du relais if(etatRelais == HIGH) { etatRelais = LOW; const char *msg = "OFF"; vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx(); Serial.println("2"); } else { etatRelais = HIGH; const char *msg = "ON"; vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx(); Serial.println("3"); } digitalWrite(RELAIS, etatRelais); } //On conserve l'état du bouton memoireBp = etatBp; }
Je me suis inspiré de différents tuto pour faire ce code.Code:#include <VirtualWire.h> // Vous devez télécharger et installer la librairie VirtualWire.h dans votre dossier "/libraries" ! int etatRelais = LOW; //Etat du relais #define RELAIS 12 uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; void setup() { pinMode(RELAIS,OUTPUT); digitalWrite(RELAIS, etatRelais); //On écrit l'état du relais Serial.begin(9600); // On initialise "le serial monitor", j'ai laissé 9600 bauds ici car c'est la valeur par défaut mais vous pouvez la modifier. vw_setup(2000); // Bits par seconde (vous pouvez le modifier mais cela modifiera la portée). Voir la documentation de la librairie VirtualWire. vw_set_rx_pin(11); // C'est sur cette broche que l'on reliera les broches DATA du récepteur, vous pouvez changez de broche si vous le désirez. vw_rx_start(); // On démarre le récepteur. Serial.println("1"); } void loop() { if (vw_get_message(buf, &buflen)) // On test afin de savoir si un message est reçu. { int i; Serial.println("1.5"); for (i = 0; i < buflen; i++) { Serial.write(buf[i]); } Serial.println("2"); if(strcmp("OFF", (char*)buf) == 0) { Serial.println("3"); etatRelais = LOW; } else { etatRelais = HIGH; } //On écrit l'état du relais digitalWrite(RELAIS, etatRelais); Serial.println("ok"); } }
PS : Les "serial.println" sont présents pour savoir où passe ma variable.
Merci !
-----