Bonjour, j'envoie par VirtualWire.h le string "Arduino" via deux émetteurs/récepteurs RF et leurs Nano associés et je n'arrive pas à décoder la réception.
J'envoie "Arduino" de l'émetteur et je reçois bien "Arduino" dans le récepteur mais seulement en Serial.print; impossible de faire des tests dessus: problème de string, pointeur étoile string et int, je ne m'en sors pas.
Je voudrais juste faire le test comme quoi je reçois bien le string envoyé: en l’occurrence: "Arduino" et faire ensuite ce qu'il faut faire...
Comme çà:
/*****************************************************************
* On envoie un nombre entier différent selon le bouton appuyé.
* Boutons reliées aux entrées 2, 3 et 4.
* Sketch de l'émetteur (branché à la pin 12, par défaut).
* http://electroniqueamateur.blogspot.com/2014/01/modules-rf-433-mhz-virtualwire-et.html
*****************************************************************/
#include <VirtualWire.h> // librairie VirtualWire
#include "define.h" // définitions relatives au programme
int Nombre;
char Message[VW_MAX_MESSAGE_LEN] = "Arduino";
//const char *msg = "Arduino les bains"; // Tableau qui contient notre message
//char *msg = "Arduino"; // Tableau qui contient notre message
void setup()
{
vw_setup(2000); // Bits par seconde
pinMode(bouton1, INPUT);
digitalWrite(bouton1, HIGH); // pull up interne
pinMode(bouton2, INPUT);
digitalWrite(bouton2, HIGH);
pinMode(bouton3, INPUT);
digitalWrite(bouton3, HIGH);
pinMode(test, OUTPUT);
#ifdef ServerDEBUG
Serial.begin(9600); // for debugging
#endif
}
void loop()
{
envoie ();
delay(200);
}
void envoie () {
// Nombre = 255;
// convertion de l'int "Nombre" en tableau de char "Message"
//itoa(Nombre,Message,10); // 10 car décimal
vw_send((uint8_t *)Message, strlen(Message));
vw_wait_tx(); // Wait until the whole message is gone
#ifdef ServerDEBUG
Serial.println("Le message envoyé est: ");
//Serial.println(Message);
#endif
int i;
int lenght = strlen(Message);
for (i = 0; i < lenght; i++)
{
Serial.print(Message[i]);
}
Serial.println();
}
j'émets comme Emmett ...!
et je reçois comme açe:
/**************************************************************
* Allume une LED différente selon le message reçu.
* LEDs reliées aux entrées 2,3 et 4.
* Récepteur 433 MHz branché à l'entrée 11.
* http://electroniqueamateur.blogspot.com/2014/01/modules-rf-433-mhz-virtualwire-et.html
***************************************************************/
#include <VirtualWire.h>
#include "define.h" // définitions relatives au programme
int Nombre;
char Message[VW_MAX_MESSAGE_LEN];
char* mystring;
void setup() {
#ifdef ServerDEBUG
Serial.begin(9600);
Serial.println("initialisation serial at 9600 bps");
#endif
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(TEST, OUTPUT);
digitalWrite (TEST,LOW);
pinMode(RECEPT, OUTPUT);
digitalWrite (RECEPT,LOW);
vw_setup(2000); // Bits par seconde
vw_rx_start();
}
void loop(){
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_wait_rx_max(200)) // si un message est reçu dans les 200 ms qui viennent
{
digitalWrite (TEST,LOW); // extinction de la LED test
if (vw_get_message(buf, &buflen))
{
int i;
for (i = 0; i < buflen; i++)
{
Message[i] = char(buf[i]);
#ifdef ServerDEBUG
Serial.print(Message[i]);
#endif
}
mystring = Message;
//Serial.println(Message[buflen-2]);
#ifdef ServerDEBUG
Serial.println();
Serial.print("Message complet = ");
Serial.println(Message);
#endif
#ifdef ServerDEBUG
Serial.print("Message complet du string= ");
Serial.println(mystring);
#endif
decodage (); // décode le "Message"
//Message[buflen] = '\0';
// Conversion du tableau de chars en int:
Nombre = atoi(Message);
if (Nombre == 1){
digitalWrite (LED1,HIGH);
digitalWrite(13, HIGH); // turn the LED on
}
else if (Nombre == 2){
digitalWrite (LED2,HIGH);
digitalWrite(13, HIGH); // turn the LED on
}
else if (Nombre == 3){
digitalWrite (LED3,HIGH);
digitalWrite(13, HIGH); // turn the LED on
}
else if (Nombre == 4){
digitalWrite (LED1,LOW);
digitalWrite (LED2,LOW);
digitalWrite (LED3,LOW);
digitalWrite(13, LOW); // turn the LED off
//Serial.println(buf[VW_MAX_MESSAGE_LEN]);
}
} /// fin de if (vw_get_message(buf, &buflen))
} /// fin de if (vw_wait_rx_max(200))
//if (vw_wait_rx_max(1000) == 0) // si un message n'est pas reçu dans les 1000 ms qui viennent
else if (vw_wait_rx_max(400) == 0) // si un message n'est pas reçu dans les 1000 ms qui viennent
{
#ifdef ServerDEBUG
Serial.println("Message recu: rien du tout");
#endif
digitalWrite (TEST,HIGH); // signalement de perte de réception par allumage de la LED test
}
} // fin de loop
///// fonction decodage qui "analyse" le code reçu
void decodage (void) {
if (mystring == 'Arduino') {
digitalWrite(RECEPT, HIGH);
}
} // fin de decodage ()
En gros, comment faire pour faire pour tester qu'il reçois bien "Arduino" et faire ce qui s'en suit mais pas seulement que l'afficher.com ?
==> problèmes de types/genres int/string/tableaux de chars/pointeurs sur tableaux de chars etc....
Quelle serait l'astuce ? lien ? Réponse directe !