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:
#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;

}
Code du récepteur :
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");

  }

 }
Je me suis inspiré de différents tuto pour faire ce code.

PS : Les "serial.println" sont présents pour savoir où passe ma variable.


Merci !