Code pour sans fil et relais

Salut à tous,

J’essaye de pouvoir commander un relais a distance.

J’utilise pour cela deux arduino et un module emetteur/recepteur 433 mhz.
Je parvient a envoyer un message de l’un à l’autre, mais lorsque que je tente que l’arduino qui commande le relais l’active lorsque le message est reçu, ça ne fonctionne pas.

J’ai utiliser ce tuto ci http://skyduino.wordpress.com/2011/12/29/tutoriel-arduino-et-emetteurrecepteur-433mhz-virtualwire/

et voici monde code :

#include // inclusion de la librairie VirtualWire

void setup() // Fonction setup()
{
Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor
Serial.println(« Tuto VirtualWire »); // Petit message de bienvenue
pinMode (13, OUTPUT);
vw_setup(2000); // initialisation de la librairie VirtualWire à 2000 bauds (note: je n’utilise pas la broche PTT)
vw_rx_start(); // Activation de la partie réception de la librairie VirtualWire
}

void loop() // Fonction loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message reçu (de taille maximum VW_MAX_MESSAGE_LEN)
uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau

// REMARQUE ULTRA IMPORTANTE :
// Par le passé ces deux lignes se trouvaient en « haut de programme », c’était donc des variables globales.
// Elles ne doivent PAS être globales, c’est très important !
//
// Pourquoi ?
// C’est très simple. Posez vous la question suivante : que vaut « buflen » si la réception d’un message échoue,
// où qu’on reçoit un message de moins de VW_MAX_MESSAGE_LEN octets ?
// Au début « buflen » vaut VW_MAX_MESSAGE_LEN, mais après « buflen » vaudra une valeur < VW_MAX_MESSAGE_LEN.
// Et paf, la taille de votre buffer vient de diminuer pour la réception suivante, et ainsi de suite.

if (vw_wait_rx_max(200)) // Si un message est reçu dans les 200ms qui viennent
{
if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
{
Serial.print("RX : ");
for (byte i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
Serial.print(buf[i]);
Serial.println("");
}
}
if ( buf == "Test reussi")
{ digitalWrite(13, HIGH);
}

}

Personne ? ^^

Bonsoir,

A priori sans connaître plus avant les bibliothèques que tu utilises, ton problème peut autant provenir de ton code que de ton schéma éléectonique.

Peux-tu nous donner des précisions sur ton relais, son pilotage, sa liaison avec l'arduino ?

Plus tu nous donneras de détails mieux nous pourrons t'aider.

@+

Zoroastre.

Naleur:
Personne ? ^^

bonsoir
ton code ne compile pas 8)
mets au moins un code complet qui compile

Ben oui justement, il est la le soucis, je ne parvient pas à trouver pourquoi ça ne fonctionne pas ni la solution :p, pour que quand je reçois le message correcte, le relais s'active ....

Voici quelques photos du montage (je fais un plan le plus vite possible)

Hello,

#include” tout seul :’( ?! À vue de nez il s’ennuie :frowning: et a besoin d’un peu de compagnie :wink:

J’ai essayer avec un autre code, je reçois bien le message Arduino, mais pas moyen de savoir comment faire en sorte que lorsque le recepteur reçoit ce message le relais s’active.

#include <VirtualWire.h> // inclusion de la librairie VirtualWire
 
void setup() // Fonction setup()
{
  pinMode(13, OUTPUT);
    Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor
    Serial.println("Tuto VirtualWire"); // Petit message de bienvenue
    vw_setup(2000); // initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
    vw_rx_start();  // Activation de la partie réception de la librairie VirtualWire
}
 
void loop() // Fonction loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message reçu (de taille maximum VW_MAX_MESSAGE_LEN)
    uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau
 
    // REMARQUE ULTRA IMPORTANTE :
    //   Par le passé ces deux lignes se trouvaient en "haut de programme", c'était donc des variables globales.
    //   Elles ne doivent PAS être globales, c'est très important !
    //
    //    Pourquoi ?
    //    C'est très simple. Posez vous la question suivante : que vaut "buflen" si la réception d'un message échoue,
    //    où qu'on reçoit un message de moins de VW_MAX_MESSAGE_LEN octets ?
    //    Au début "buflen" vaut VW_MAX_MESSAGE_LEN, mais après "buflen" vaudra une valeur < VW_MAX_MESSAGE_LEN.
    //    Et paf, la taille de votre buffer vient de diminuer pour la réception suivante, et ainsi de suite.
 
    if (vw_wait_rx_max(200)) // Si un message est reçu dans les 200ms qui viennent
    {
        if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
        {
            
            for (byte i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
                Serial.write(buf[i]);
            Serial.println("");
        
      }
if(strcmp("Arduino", (char*)buf) == 0)
  digitalWrite(13, HIGH);

    }
  }

Le code paraît pourtant bien meilleur...

Si le message reçu apparaît correct sur le moniteur série (as-tu des copies d'écran ?), il faut peut-être voir du côté du montage (les photos annoncées ne sont pas apparemment pas passées ?).

Une simple led réagit-elle ?