Bonjour, je suis actuellement en projet SIN pour le bac et je dois transmettre des données en haute-fréquence d'une arduino A à une arduino B afin que l'arduino B allument x leds en fonctions des messages envoyées.
Exemples : Je branche un capteur à contact sur l'arduino A, celle-ci envoie un 1 ou 0 logique par transmission HF et l'arduino B se contentera 1 = d'allumer ou 0 = éteindre la LED.
J'ai le code de transmission qui fonctionne (il envoie des messages dans le moniteur série), j'ai tenté de modifier et d'adapter mais rien n'y fait.
Voici le code de transmission non modifié :
Emission :
#include <VirtualWire.h>
//Grove - 315(433) RF link kit Demo v1.0
//by :http://www.seeedstudio.com/
//connect the sent module to D2 to use
#include <VirtualWire.h>
int RF_TX_PIN = 2;
void setup()
{
vw_set_tx_pin(RF_TX_PIN); // transmission en pin 2
vw_setup(2000); // transmission 2000bit/s
}
void loop()
{
const char *msg = "hello"; //variable contenant hello
vw_send((uint8_t *)msg, strlen(msg)); // Envoyer hello toutes les 400ms
delay(1000);
}
Reception :
//Grove - 315(433) RF link kit Demo v1.0
//by :http://www.seeedstudio.com/
//connect the receive module to D2 to use ..
#include <VirtualWire.h>
int RF_RX_PIN = 2;
void setup()
{
Serial.begin(9600);
Serial.println("setup");
vw_set_rx_pin(RF_RX_PIN); // Setup receive pin.
vw_setup(2000); // Transmission speed in bits per second.
vw_rx_start(); // Start the PLL receiver.
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if(vw_get_message(buf, &buflen)) // non-blocking I/O
{
int i;
// Message with a good checksum received, dump HEX
Serial.print("Got: ");
for(i = 0; i < buflen; ++i)
{
Serial.print(buf[i], HEX);
Serial.print(" ");
//Serial.print(buf[i]);
}
Serial.println("");
}
}
Pouvez-vous m'aider pour que celui-ci fonctionne avec 2 capteurs ou 1, merci d'avance, c'est urgent.
Je vais vous conseiller d'envoyer un csv contenant:
le nombre de capteurs, une virgule, la valeur du 1er capteur, eventuellement {une vigule, la valeur au second capteur}
Pouvez vous transmettre "1,32543" puis "2,32222,-32456" ?
Pouvez vous les afficher?
Pouvez vous les decoder (strtoul décode jusqu'à ce qu'il rencontre un character qui n'est pas un chiffre, dans la base que vous voulez; strchr renvoiye le pointeur vers la première occurrence de C -ex ','- dans la chaîne à décoder; en incrementant ce pointeur, vous êres postionnés vers le champ suivant à décoder. Ces deux fonctions sont du C standard, disponibles dans l'Arduino)
JE suis un peu désolé, mais je ne comprends rien à ce que vous voulez faire:
a) pourquoi ne pas afficher le message reçu sous une forme lisible (peu de gens lisent l'hexa dans le texte) sur votre moniteur serie
b) que sont vos capteurs : un interrupteur (codé sur 1 bit...)? un compte tours (codé sur beaucoup de bits)? Ce détail peut influer sur le codage du message à transmettre.
c) que veut dire "peu réactif" (un hêtre humain n'a pas les mêmes exigences de réactivité qu'un calcul itératif)
Notez que vous transmettez 200 cars / seconde: un message aussi court que possible ("1" au lieu de "allumer", "0" au lieu de "eteindre" vous fait gagner presque 30 millisecondes)