Je débute avec arduino. En utilisant 2 arduino leonardo et 2 modules TX/RX 433Mhz , je souhaiterai allumer et éteindre 3 LEDS :indépendamment les unes des autres ;avec 3 BP sur la carte TX;
J'ai déjà essayer de bricoler 2 programmes ,mais je n'arrive pas a comprendre pourquoi ca ne fonctionne qu'une LED après l'autre ;
je voudrais fabriquer un mini jeux de lumiere , je pense que je ne suis pas très loin ou peut être a des années lumières des bon programmes
il serait peut être utile de déclarer les broches sur lesquelles tu as branché l'émetteur et le récepteur (par defaut 11 en RX et 12 en TX ... mais c'est mieux de l'écrire en clair : vw_set_tx_pin (uint8_t pin) et vw_set_rx_pin (uint8_t pin)
dans le code RX ...
je mettrais des Serial.print aux endroits stratégiques pour voir ce que ton récepteur décode vraiment comme message (pour tester, tu laisseras donc le récepteur connecté au PC avec la console série allumée pendant que tu agiras sur l'émetteur...)
je déclarerais aussi les sorties led en OUTPUT dans le setup ... ça ne mange pas de pain
chez moi, la partie émission et réception fonctionne
#include <VirtualWire.h>
#define bouton1 2
#define bouton2 3
#define bouton3 4
int Nombre;
char Message[10]; //un tableau de 10 chars suffit !
void setup() {
vw_setup(2000);
vw_set_tx_pin(12); //emetteur sur pin 12
}
void loop() {
Nombre++; //pour test (je n'ai pas de boutons)
// conversion de l'int en tableau de char
itoa(Nombre,Message,10); // 10 car décimal
vw_send((uint8_t *)Message, strlen(Message));
vw_wait_tx(); // attend la fin de l'envoi
delay(200);
}
et en reception
#include <VirtualWire.h>
#define LED1 2
#define LED2 3
#define LED3 4
int Nombre;
#define msglen 10
char Message[msglen]; //suffit largement pour passer le message
void setup() {
Serial.begin(9600);
vw_setup(2000);
vw_set_rx_pin(6); //recepteur sur pin 6
vw_rx_start();
}
void loop(){
uint8_t buf[msglen];
uint8_t buflen = msglen;
if (vw_get_message(buf, &buflen)) {
byte i; //0 à 255 ça suffit !
for (i = 0; i < buflen; i++) Message[i] = char(buf[i]);
Message[buflen] = '\0';
// Conversion du tableau de chars en int:
Serial.print("recu "); Serial.println(Message);
Nombre = atoi(Message);
if (Nombre == 1){
digitalWrite (LED1,HIGH);
Serial.println("1 on");
}
if (Nombre == 2){
digitalWrite (LED2,HIGH);
Serial.println("2 on");
}
if (Nombre == 3){
digitalWrite (LED3,HIGH);
Serial.println("3 on");
}
if (Nombre == 4){
digitalWrite (LED1,LOW);
digitalWrite (LED2,LOW);
digitalWrite (LED3,LOW);
Serial.println("all off");
}
}
}
Bonjour et merci ne m'avoir répondu aussi vite, vous êtes super sympa;
Et en plus ça fonctionne ! Je suis trop content car je vais pouvoir enfin finir mon mini projet et surement en démarrer d'autres !!
Pour parler du programme :j'avais essaye de mettre un delay sur chaque LED mais ça ne faisait rien;
Le bit dont tu parles a quoi correspond t'il dans le sketch?
C'est un bit dans ta variable nombre qui reflète l'état de chaque poussoir.
Au lieu d'affecter à ta variable une valeur pour chaque bouton comme dans ton sketch initial, dans le nouveau sketch on affecte un bit à chaque bouton ce qui permet de gérer plusieurs boutons enfoncés (donc plusieurs leds allumées)
exemple:
bouton 1 enfoncé -> nombre = 1
bouton 3 enfoncé _> nombre = 4
bouton 1 et bouton 3 enfoncés -> nombre = 5
et on fait l'inverse au décodage si nombre = 5 ça veux dire qu'on doit allumer les leds 1 et 3
J'ai essayer de rajouter 1 canal (passer de 3 a 4 canaux) mais en prenant : Nombre:6 ou 7 pour le 4eme canal j'ai 2 canaux qui réagisse en meme temps cote RX
J'ai essayer de rajouter 1 canal (passer de 3 a 4 canaux) mais en prenant : Nombre:6 ou 7 pour le 4eme canal j'ai 2 canaux qui réagisse en meme temps cote RX
qqun peut m'aider svp ?
bonjour
Il faut prendre 8
ça doit etre une puissance de 2
1 2 4 8 16 32 64 128
J'ai reussi a faire fonctionner mon mini jeux de lumieres avec VirtualWire mais je voudrais securiser ma connection car si je fais fonctionner deux ou trois montages en meme temps un emmetteur active tous les autres recepteurs.
J'ai bidouiller mes deux sketch en ulilisant RCSWITCH mais ca ne donne rien