Bonjour, j'aimerais bien que quelqu'un puisse m'aider a régler mon soucie avec mon module RF 433 MHz . Je vous explique le contexte : j'ai 2 arduino uno , un emetteur connecté sur D12 et un recepteur connecté sur D12 ( de l'autre arduino ). Sur mon arduino-emetteur, il y a le buttonA sur D13 et buttonB sur D9 . Celui du recepteur , la LEDA sur D9 et LEDB sur D7.
Mon problème est que mon code doit permettre à ce que le bouton poussoir B allume la LEDB si on appuie et eteint la LEDB si on appuie pas sur le bouton B . Meme principe que le A. Le code marche bien en B ( meme si il ne faut appuyer trop vite sinon la ledB ne s allume pas parfois mais ce n'est pas important ) . Par contre en A , quand j'appuie sur bouton A, la LEDA s'allume et s'eteint à interval de 1 sec environ.
voici le code emetteur :
#include <VirtualWire.h>
char controller;
const int buttonA = 13;
const int buttonB = 9;
const char CMD_BUTTON_A = "BPAxxxx" ;
const char* CMD_BUTTON_B = "BPB" ;
const char* CMD_BUTTON_NUL = "NUL" ;
int buttonState1 = 0;
int buttonState2 = 0;
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(buttonA, INPUT);
pinMode(buttonB, INPUT);
//pinMode(13,OUTPUT);
vw_set_ptt_inverted(true); //
vw_set_tx_pin(12);
vw_setup(4500);// speed of data transfer Kbps// plus petit, meilleur porté.
// a changer si besoin ameliorer le signal emis
//delay(100);
}
void loop()
{
//byte message[VW_MAX_MESSAGE_LEN];
buttonState1 = digitalRead(buttonA);
buttonState2 = digitalRead(buttonB);
Serial.println(controller);
if (buttonState1 == HIGH)
{
controller="1" ;
vw_send((byte*) CMD_BUTTON_A, strlen(CMD_BUTTON_A) + 1);
vw_wait_tx(); // Wait until the whole message is gone
//digitalWrite(13,LOW);
}
if (buttonState2 == HIGH)
{
controller="2" ;
vw_send((byte*) CMD_BUTTON_B, strlen(CMD_BUTTON_B) + 1);
vw_wait_tx(); // Wait until the whole message is gone
//digitalWrite(13,LOW);
}
else
{
controller="0" ;
vw_send((byte*) CMD_BUTTON_NUL, strlen(CMD_BUTTON_NUL) + 1);
vw_wait_tx(); // Wait until the whole message is gone
//digitalWrite(13, HIGH);
}
}
Voici le recepteur :
#include <VirtualWire.h>
const byte PIN_LED_A = 9;
const byte PIN_LED_B = 7;
const char* CMD_BUTTON_A = "BPAxxxx";
const char* CMD_BUTTON_B = "BPB" ;
const char* CMD_BUTTON_NUL = "NUL";
void setup()
{
vw_set_ptt_inverted(true); // Required for DR3100
vw_set_rx_pin(12);
vw_setup(4500); // Bits per sec
Serial.begin(9600);
pinMode(PIN_LED_A, OUTPUT);
pinMode(PIN_LED_B, OUTPUT);
vw_rx_start(); // Start the receiver PLL running
}
void loop()
{
byte message[VW_MAX_MESSAGE_LEN];
byte taille_message = VW_MAX_MESSAGE_LEN;
//est la taille max en octet d un message
//fourni par la bibliotheque Virtualwire
Serial.println();
if (vw_get_message(message, &taille_message)) // Non-blocking//recois le message
{
if (strcmp((char*) message, CMD_BUTTON_A) == 0)
{
digitalWrite(9,HIGH);
//digitalWrite(7,);
}
if (strcmp((char*) message, CMD_BUTTON_B) == 0)
{
//digitalWrite(9,LOW);
digitalWrite(7,HIGH);
}
if (strcmp((char*) message, CMD_BUTTON_NUL) == 0)
{
digitalWrite(9,LOW);
digitalWrite(7,LOW);
}
}
}
Pour ceux qu'ils l'auraient remarqué, que ce soit le A ou le B , les operations sont les même donc je ne comprend pas pourquoi A ne fonctionne pas alors que B parfaitement. J'ai mis des "controle" pour voir si arduino emetteur emets bien le message , en B il envoie bien "2" quand j'appuie mais en A , il affiche tout le temps "0" . Je pense que A clignote car il sent que le bouton A est appuyer mais ne recois pas le message .
Voila vous avez toutes les infos et tout aide est la bienvenue.