Bonjour,
je me présente rapidement, je me suis mis à Arduino voila de cela 2 mois et je dois avouer que je trouve ça passionnant. Ancien codeur PHP, je trouve ce projet vraiment intuitif ! Seulement j'ai quelque lacune sur les variables je pense..
Je vous expose mon problème : je commence à m'amuser à transmettre avec mon arduino, cependant je reçois mes transmissions sous forme de chiffre. Je suppose donc à une erreur de conversion ? Voici les codes :
Reception :
#include <VirtualWire.h> // 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
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("");
}
}
}
Emetteur :
#include <VirtualWire.h> // inclusion de la librairie VirtualWire
const char *msg = "Arduino"; // Tableau qui contient notre message
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
vw_setup(2000); // initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
}
void loop() // Fonction loop()
{
Serial.print("TX ... "); // On signale le début de l'envoi
vw_send((uint8_t *)msg, strlen(msg)); // On envoie le message
vw_wait_tx(); // On attend la fin de l'envoi
Serial.println("Done !"); // On signal la fin de l'envoi
delay(1000); // Et on attend 1s pour pas flooder
}
Au lieu de recevoir "Tuto VirtualWire" , je reçois 65114100117105110111
Merci à vous
Arthur