Module NRF24L01 [Résolu]

Portrait de vimg

Salut à vous tous !

Voilà, on m'as donné deux modules NRF24L01, mais même en cherchant, je ne trouve que des exemples comprenant des joysticks ou pour envoyer un message via le moniteur series. Et rien de bien simple au final ^^ Du coup, lorsque je veux simplement faire une télécommande avec un simple bouton poussoir, pour allumer une led à l'autre bout de la pièce, impossible de savoir quoi écrire dans le code :/

Si quelqu'un d'entre-vous à déjà eu l'occasion d'utiliser ce modules, je suis tout ouïe. :) 

Merci à vous !
 

Portrait de Alex

Bonjour,

Est-ce que tu as les liens de tes recherches?

Je peux peut-être t'aider pour la suite.

Portrait de vimg

Bonjour Alex, merci de ta réponse, alors voici les liens :
http://forum.arduino.cc/index.php?topic=217865.0

et https://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo

Mais n'ayant pas encore de joystick, ni de connaissance pour ce module, j'ai surtout voulu tester celui-ci qui contrôle uniquement des leds grâce à des boutons poussoirs. 
http://electroniqueamateur.blogspot.fr/2012/04/arduino-telepathe.html

Malheureusement, même avec cet exemple, rien ne se passe. Pourtant, tout est correct au niveau des branchement, et j'ai juste copier-coller le code.

J'ai trouvé ce lien hier, mais je n'ai pas encore eu le temps de le tester, j'espère pouvoir le faire demain, mais au moins, je pourrais tester l'échange entre les deux plus facilement. https://skyduino.wordpress.com/2012/01/20/tutoriel-arduino-mirf-v2-nrf24...

Si tu peux me trouver une petite solution, se serait génial. Il n'y a rien de pressé pour l'instant, je recherche tranquillement pour le moment :)

Merci beaucoup !

Portrait de Alex

Salut,

J'ai trouvé ce tuto en anglais.

J'ai pas fais le test encore mais c'est très bien expliqué et l'exemple est ultra simple.

Promis un jour je ferai une vidéo sur le nRF24L01. ;)

Portrait de vimg

Merci pour le lien, il fonctionne du tonnerre, et le module à une assez grande portée (environ 15m de mon RdC au premier étage). Après j'ai voulu voir pour faire une télécommande avec un bouton poussoir et une led, j'ai absolument rien compris au début, puis j'ai trouvé ce lien : http://forum.arduino.cc/index.php?topic=138663.0 et nickel, ça fonctionne !!!

J'ai juste retiré le "done =" à la vingtième ligne pour le récepteur, sinon, j'avais une erreur.

J'y vois plus clair en ce qui concerne la communication, je vais essayer avec plusieurs boutons et leds.  

En tout cas, un gros merci, je commençais à me demander si ça ne venait pas d'un de mes modules...

Portrait de Alex

Merci pour ton retour et merci pour le lien.

Ravi de voir que tu t'en es sorti!

Portrait de yeye

bonjour a vous, je debutes avec arduino j'ai fais des montages en bluetooth , aujourd'hui  je voudrais utiliser le module nrf24l01 pour allumer des leds avec des boutons poussoir le but etant pour la suite de commander des electrovannes hydraulique en passant par des transistor tout comme j'ai fait avec le bluetooth. Or aujourd'hui j'arrive a commander une led avec le tuto trouver sur ce forum mais pas moyen d'en rajouter une autre pourtant le signal doit passer puisque sur le moteur serie le signal apparait mais la led ne s'allume pas pourtant les branchements sont correct merci a ceux qui pourront m'aider

Portrait de yeye

mon code pour rx c'est

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
char msg[2];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int LED1 = 6;
int LED2 = 7;
void setup(void){
 Serial.begin(9600);
 radio.begin();
 radio.openReadingPipe(1,pipe);
 radio.startListening();
 pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
 }

void loop(void){
 if (radio.available()){
   bool done = false;    
   while (!done){
      radio.read(msg, 1);      
     Serial.println(msg[0]);
     if (msg[0] == 1){
      delay(10);
     digitalWrite(LED1, HIGH);}
     else {digitalWrite(LED1, LOW);}
     delay(10);
     radio.read(msg, 2);      
     Serial.println(msg[0]);
     if (msg[0] == 2){delay(10);
     digitalWrite(LED2, HIGH);}
     else {digitalWrite(LED2, LOW);
     }
     delay(10);
     }}
 else{Serial.println("No radio available");}}

et celui de tx c'est

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
char msg[2];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int SW1 = 7;
int SW2 = 8;
void setup(void){
 Serial.begin(9600);
 radio.begin();
 radio.openWritingPipe(pipe);}

void loop(void){
 if (digitalRead(SW1) == HIGH){
 msg[0] = 1;
 radio.write(msg, 1);
 if (digitalRead(SW2) == HIGH){
 msg[0] = 2;
 radio.write(msg, 2);
 }}}

Portrait de Walter

Salut,

du coup tu as quoi sur le moniteur série ?

Pourquoi du fait un write(msg, 2) et un read(msg, 2), puisque visiblement tu ne veux passer qu'un seul caractère à la fois ?

Portrait de yeye

salut , sur mon moniteur série j'ai le message 1 qui passes quand j'appui sur le bouton et la led s'allume sur l'autre arduino, mais je n'arrive plus a avoir le message 2 maintenant je ne sais pas pourquoi.Quand j'avais le 2 qui s'affichait l'autre led ne s'allumait pas. J'aurais besoin aussi d'utiliser le 1 et le 2 en meme temps chose que j'arrives en bluetooth

Portrait de Walter

Salut,

je répète ma question pourquoi envoyer/recevoir 2 caractères(write(msg, 2)/read(msg, 2)) dans le deuxième cas alors qu'un seul caractère t'intéresse?

Concernant ton nouveau problème, tu l'a systématiquement, même si éteint et rallume?

C'est surprenant que tu enchaînes systématiquement tes deux "read" à chaque itération de ta bloque "While"
Telquel tu fait deux read toutes les 20ms, appuis tu vraiment sur tes deux boutons en moins de 20ms?

De plus si tu synchronise mal tes séquences, tu n'es pas sûre du comportement final de ton programme.
Normalement le read supprime le contenu du buffer de réception, si tu lit le bon nombre de caractère ou plus.

Je pense que tu devrais faire de les mêmes writes, puisque c'est le même comportement attendue et un seul read dans ta boucle.