Problema moduli Wireless NRF24L01+

Salve a tutti, da ieri sto impazzendo nel trovare una soluzione al mio problema, ossia l'uso di due NRF24L01 per far dialogare due Arduino.
Posseggo un Arduino Uno e Mega e voglio farli scambiare alcune informazioni.
Ho cercato alcune librerie, tra le quali:

Ho seguito anche questa guida, più di una volta, ma niente da fare --> Arduino: comunicazione wireless 2.4GHz con nRF24L01 e comunicazione SPI - it | McMajan
Insomma le ho provate tutte, ma i due arduino NON riescono a comunicare! :0 :0
Aiutoo!
Un grazie in anticipo!

Ho solo bisogno di capire come inviare e ricevere un numero.

Hai già provato a mettere un condensatore in parallelo tra l'alimentazione e ground di ogni modulo?
Io avevo risolto mettendo un condensatore da 10uF o 47uF

Il problema è il codice. Visto che hai detto che hai risolto, potresti postare il tuo codice?

Dopo aver letto questa pagina
http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
ed aver provato lo sketch sostituendo agli input del joystick due potenziometri da 10kOhm
ho provato l'esempio LED remote della libreria di maniacbug

Ti dico, dopo aver letto e provato per 1 mese questi modulini mi resi conto che:

  • i condensatori aiutano tantissimo
  • a quanto si legge anche l'alimentazione a3.3v è importante, a volte quella degli arduino non è eccezionale ed un convertitore diverso aiuta
  • la portata è decisamente inferiore a quanto dichiarato

Grazie per la dritta,
però in quella libreria non c'è nessun esempio che si chiama "LED Remote"

Prova a scaricare lo zip da questa pagina

Quindi devo caricare lo stesso esempio su i due Arduino?

Per quanto riguarda l'implementazione dei condensatori,
dove li inserisco? E da quanti uF devo essere?

gazza_mo:
Hai già provato a mettere un condensatore in parallelo tra l'alimentazione e ground di ogni modulo?
Io avevo risolto mettendo un condensatore da 10uF o 47uF

si carica lo sketch in su entrambi gli arduino, ma in uno dei due (quello dove metti il led che vuoi si accenda) colleghi quello che nello sketch è chiamato " role_pin " a GND con una resistenza (prova una 10K )

Ho effettuato quello che mi hai detto ma non ha funzionato :astonished: :astonished:
Provando a scambiare fra i due arduino i loro ruoli, l'errore resta.

Per il collegamento ho seguito questa guida:
http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo

In allegato la foto dell'errore

A dx non vedi che hai tutti i valori a zero? Hai un collegamento fatto male, ricontrollali tutti

Fatto, la COM7 è il Mega e l'altra è l'Uno
Comunque seguendo quella guida mi dava valore 0, mentre vedendo qui http://arduino.cc/en/Hacking/PinMapping2560
dove dice tutti i PIN, c'è proprio SCK, MOSI...

Li stai tenendo entrambi attaccati al pc contemporaneamente ?
Non vorrei ricordare male ma secondo me io facevo lo stesso e non funzionavano.
Lasciandone solo uno attaccato al pc ed un altro al caricabatterie del cell invece andavano.

Ho provato alimentando il mega con il pc e l'uno con una batteria da 12V e viceversa, ma niente.
Raga aiutoo, non so proprio dove sbattere la testa. :cold_sweat: :cold_sweat:

EDIT:
Ha FUNZIONATOOOO!!!
provando lo sketch che ho trovato su questo sito http://www.bajdi.com/playing-with-nrf24l01-modules/,i due arduino si PARLANOO!! Il led si accende e spegne tranquillamente $) $) $) :sweat_smile: :sweat_smile: :sweat_smile:

Nel mio progetto però, ho bisogno che qualche volta il server e il client si scambino di ruolo.
Precisamente ho intenzione di creare una casa di legno, per gli esami stato, e quindi collegare Arduino Uno al PC "client" e il Mega si occupa della casa (sensore di temperatura,lumisotà ecc...).
Usando il millis(), ogni 250mS arduino Mega dovrà comunicare la temperatura all'UNO. Nel mio sketch è possibile attivare l'antifurto, ed è qui che l'UNO dovrà, da client, diventare server per inviare al Mega il comando per attivare o disattivare l'antifurto.
Esiste nella Mirf.h una spece di evento DataReceived?
Come posso fare? :roll_eyes:

Puoi collegare un interrupt al pin di IRQ per la ricezione di un nuovo pacchetto. Non è però facile e devi leggerti il datasheet del chip Nordic per tutti i dettagli, inutile che sto a riscriverli.

Che intendi per

Puoi collegare un interrupt al pin di IRQ per la ricezione di un nuovo pacchetto

Ma per inviare una stringa, come posso fare?
Se da Arduino mega invio una stringa, Arduino uno riceve caratteri strani O_o

Avrai qualche errore nel tuo programma..
Il più diffuso è che invio troppi o troppi pochi dati. Il payload ha dimensioni precise e se dinamico dei limiti.

Segui qualche esempio su internet e prova a modificarlo alle Tue necessità.

La stringa che devo inviare è una stringa di lunghezza costante ma di valore variabile.
Es --> String temp = "Temp:26.78"
Il payload deve valere quanto la lunghezza della stringa temp?
Tipo --> int payload = temp.lenght

Aggiungi 1 al numero di caratteri per il byte '\0'

Ciao

Che intendi per:

Aggiungi 1 al numero di caratteri per il byte '\0'

Il codice qui sotto è quello di Arduino Uno, "Slave", che in base al valore ricevuto dal Mega fa ruotare un servo, accendere e spegnere un led;
una cosa stupida, prima di effettuare quella più complessa.

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <Servo.h> 
 
Servo myservo;

int rate;
int ledValue;
int grad;
const int led = 3;
 
void setup(){
  myservo.attach(4);
   Mirf.cePin = 9;             //ce pin on Mega 2560, REMOVE THIS LINE IF YOU ARE USING AN UNO
  Mirf.csnPin = 10;  
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)"serv1");
  Mirf.payload = sizeof(rate);
  Mirf.config();
}
 
void loop(){
 
  while(!Mirf.dataReady());
  Mirf.getData((byte *) &rate);
  ledValue = (map( rate, 0, 1024, 0, 255 ) );
  analogWrite(led, ledValue);
  Serial.print("Valore Ricevuto --> ");
  Serial.println(rate);
  grad = map(rate, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(grad); 
  delay(10);
}

È possibile che il mio programma Arduino dia problemi con questa libreria?

Quando vado a compilare, appaiono gli errori:

PRX:4: error: 'nRF24L01p' does not name a type
PRX.ino: In function 'void setup()':
PRX:11: error: 'receiver' was not declared in this scope
PRX.ino: In function 'void loop()':
PRX:19: error: 'receiver' was not declared in this scope

Com'è possibile che non riconosce il tipo dell'oggetto?
Ho anche provato a eliminare e re-importare la libreria ma niente da fare.
Uso arduuno V 1.5.0