Modulo NRF24L01 wifi

Buonasera a tutti. Sto cercando di far funzionare il mio progetto cercapersone con due arduino Nano e due moduli NRF24 . Ora nella libreria che ho scaricato ci sono alcuni esempi, tra cui un controllo remoto di un led tramite pulsante. Questo lo Sketch :

/*
Copyright (C) 2011 J. Coliz <maniacbug@ymail.com>

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation.
*/

/**
* Example LED Remote
*
* This is an example of how to use the RF24 class to control a remote
* bank of LED's using buttons on a remote control.
*
* On the 'remote', connect any number of buttons or switches from
* an arduino pin to ground.  Update 'button_pins' to reflect the
* pins used.
*
* On the 'led' board, connect the same number of LED's from an
* arduino pin to a resistor to ground.  Update 'led_pins' to reflect
* the pins used.  Also connect a separate pin to ground and change
* the 'role_pin'.  This tells the sketch it's running on the LED board.
*
* Every time the buttons change on the remote, the entire state of
* buttons is send to the led board, which displays the state.
*/

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

//
// Hardware configuration
//

// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 (CE & CS)

RF24 radio(9,10);

// sets the role of this unit in hardware.  Connect to GND to be the 'led' board receiver
// Leave open to be the 'remote' transmitter
const int role_pin = A4;

// Pins on the remote for buttons
const uint8_t button_pins[] = { 2,3,4,5,6,7 };
const uint8_t num_button_pins = sizeof(button_pins);

// Pins on the LED board for LED's
const uint8_t led_pins[] = { 2,3,4,5,6,7 };
const uint8_t num_led_pins = sizeof(led_pins);

//
// Topology
//

// Single radio pipe address for the 2 nodes to communicate.
const uint64_t pipe = 0xE8E8F0F0E1LL;

//
// Role management
//
// Set up role.  This sketch uses the same software for all the nodes in this
// system.  Doing so greatly simplifies testing.  The hardware itself specifies
// which node it is.
//
// This is done through the role_pin
//

// The various roles supported by this sketch
typedef enum { role_remote = 1, role_led } role_e;

// The debug-friendly names of those roles
const char* role_friendly_name[] = { "invalid", "Remote", "LED Board"};

// The role of the current running sketch
role_e role;

//
// Payload
//

uint8_t button_states[num_button_pins];
uint8_t led_states[num_led_pins];

//
// Setup
//

void setup(void)
{
 //
 // Role
 //

 // set up the role pin
 pinMode(role_pin, INPUT);
 digitalWrite(role_pin,HIGH);
 delay(20); // Just to get a solid reading on the role pin

 // read the address pin, establish our role
 if ( digitalRead(role_pin) )
   role = role_remote;
 else
   role = role_led;

 //
 // Print preamble
 //

 Serial.begin(115200);
 printf_begin();
 printf("\n\rRF24/examples/led_remote/\n\r");
 printf("ROLE: %s\n\r",role_friendly_name[role]);

 //
 // Setup and configure rf radio
 //

 radio.begin();

 //
 // Open pipes to other nodes for communication
 //

 // This simple sketch opens a single pipes for these two nodes to communicate
 // back and forth.  One listens on it, the other talks to it.

 if ( role == role_remote )
 {
   radio.openWritingPipe(pipe);
 }
 else
 {
   radio.openReadingPipe(1,pipe);
 }

 //
 // Start listening
 //

 if ( role == role_led )
   radio.startListening();

 //
 // Dump the configuration of the rf unit for debugging
 //

 radio.printDetails();

 //
 // Set up buttons / LED's
 //

 // Set pull-up resistors for all buttons
 if ( role == role_remote )
 {
   int i = num_button_pins;
   while(i--)
   {
     pinMode(button_pins[i],INPUT);
     digitalWrite(button_pins[i],HIGH);
   }
 }

 // Turn LED's ON until we start getting keys
 if ( role == role_led )
 {
   int i = num_led_pins;
   while(i--)
   {
     pinMode(led_pins[i],OUTPUT);
     led_states[i] = HIGH;
     digitalWrite(led_pins[i],led_states[i]);
   }
 }

}

//
// Loop
//

void loop(void)
{
 //
 // Remote role.  If the state of any button has changed, send the whole state of
 // all buttons.
 //

 if ( role == role_remote )
 {
   // Get the current state of buttons, and
   // Test if the current state is different from the last state we sent
   int i = num_button_pins;
   bool different = false;
   while(i--)
   {
     uint8_t state = ! digitalRead(button_pins[i]);
     if ( state != button_states[i] )
     {
       different = true;
       button_states[i] = state;
     }
   }

   // Send the state of the buttons to the LED board
   if ( different )
   {
     printf("Now sending...");
     bool ok = radio.write( button_states, num_button_pins );
     if (ok)
       printf("ok\n\r");
     else
       printf("failed\n\r");
   }

   // Try again in a short while
   delay(20);
 }

 //
 // LED role.  Receive the state of all buttons, and reflect that in the LEDs
 //

 if ( role == role_led )
 {
   // if there is data ready
   if ( radio.available() )
   {
     // Dump the payloads until we've gotten everything
     while (radio.available())
     {
       // Fetch the payload, and see if this was the last one.
       radio.read( button_states, num_button_pins );

       // Spew it
       printf("Got buttons\n\r");

       // For each button, if the button now on, then toggle the LED
       int i = num_led_pins;
       while(i--)
       {
         if ( button_states[i] )
         {
           led_states[i] ^= HIGH;
           digitalWrite(led_pins[i],led_states[i]);
         }
       }
     }
   }
 }
}
// vim:ai:cin:sts=2 sw=2 ft=cpp

La mia domanda è devo separare questo file? Perchè se lo carico cos’ su entrambi i dispositivi non funziona. Grazie a chi mi vorrà essere di aiuto.

>Miki555: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

P.S.: … inoltre ti consiglio un’attenta rilettura di TUTTO il REGOLAMENTO così da evitare futuri problemi.

Qui si cerca di adattare le risposte al livello di conoscenza informatica ed elettronica del richiedente, ma la tua presentazione in questo senso è un po' scarsina.

Grazie,

Ciao,
P.

  Also connect a separate pin to ground and change[color=#222222][/color]
 * the 'role_pin'.  This tells the sketch it's running on the LED board.

Lo sketch usa il role_pin per capire se sta nella scheda che comanda o in quella che riceve con il LED

zoomx:

  Also connect a separate pin to ground and change[color=#222222][/color]
  • the 'role_pin'.  This tells the sketch it's running on the LED board.


Lo sketch usa il role_pin per capire se sta nella scheda che comanda o in quella che riceve con il LED

Grazie mille! Buona giornata

Ma leggere il testo degli esempi per capire come funzionano è così complicaato?...

Ragazzi ma in A4 devo collegare qualcosa sulla scheda?

// sets the role of this unit in hardware.  Connect to GND to be the 'led' board receiver
// Leave open to be the 'remote' transmitter
const int role_pin = A4;

Scusate le stupidaggini ma sono agli inizi e mi mancano ancora molte basi.
Un grazie a chi vorrà aiutarmi

Significa che il pin scelto va collegato a massa (GND) nella scheda ricevente con LED e lasciato non collegato in quella trasmittente (in realtà andrà a 5V tramite il pull up interno).

zoomx:
Significa che il pin scelto va collegato a massa (GND) nella scheda ricevente con LED e lasciato non collegato in quella trasmittente (in realtà andrà a 5V tramite il pull up interno).

Grazie ancora !