nRF24L01 problemi di comunicazione

Ciao a tutti, oggi ho acquistato 4 sensori NRF24L01, ho utilizzato alcuni tutorial trovati in rete, ma ho trovato fin da subito dei problemi. Io utilizzo un Arduino UNO e un Arduino MEGA, e ho eseguito i collegamenti di SCK, MOSI, MISO rispettivamente nell’UNO (13,11, 12) e per MEGA (52,51, 50), poi ho collegato i morsetti CE e CSN nell’UNO (9, 10) e nel MEGA (9, 53). Ho utilizzato i seguenti codici:

SERVER

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#define MIRF_PAYLOAD 32
byte rxData[MIRF_PAYLOAD + 1];
byte txData[MIRF_PAYLOAD + 1];
void setup(){
memset(rxData, 0, sizeof(rxData));
memset(txData, 0, sizeof(txData));
Serial.begin(9600);
Mirf.cePin = 9;
Mirf.csnPin = 53;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte*)“serv1”);
Mirf.payload = MIRF_PAYLOAD;
Mirf.channel = 10;
Mirf.config();
}
void loop(){
memset(rxData, 0, sizeof(rxData));
if(!Mirf.isSending() && Mirf.dataReady()){
Mirf.getData(rxData);
Serial.println((const char*)rxData);
Mirf.setTADDR((byte*)“clie1”);
for (unsigned i = 0; i != MIRF_PAYLOAD; ++i) {
txData = rxData + 1;
* }*
* Mirf.send(txData);*
* }*
}
[/quote]
CLIENT
> #include <SPI.h>
> #include <Mirf.h>
> #include <nRF24L01.h>
> #include <MirfHardwareSpiDriver.h>
> #define MIRF_PAYLOAD 32
> byte rxData[MIRF_PAYLOAD + 1];
> byte txData[MIRF_PAYLOAD + 1];
> const char msg[]= “Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura, che’ la diritta via era smarrita. Ahi quanto a dir qual era e’ cosa dura, esta selva selvaggia e aspra e forte, che nel pensier rinova la paura! Tant’e’ amara che poco e’ piu’ morte; ma per trattar del ben ch’i’ vi trovai, diro’ de l’altre cose ch’i’ v’ho scorte. Io non so ben ridir com’i’ v’intrai, tant’era pien di sonno a quel punto che la verace via abbandonai.”;
> int msgIndex = 0;
> void setup(){
> memset(rxData, 0, sizeof(rxData));
> memset(txData, 0, sizeof(txData));
> Serial.begin(9600);
> Mirf.cePin = 9;
> Mirf.csnPin = 10;
> Mirf.spi = &MirfHardwareSpi;
> Mirf.init();
> Mirf.setRADDR((byte*)“clie1”);
> Mirf.payload = MIRF_PAYLOAD;
_
> Mirf.channel = 10;
_
> Mirf.config();
> }
> void loop() {
> Mirf.setTADDR((byte*)“serv1”);
> memcpy(txData, msg + msgIndex, MIRF_PAYLOAD);
> Mirf.send(txData);
> while(Mirf.isSending()){
> }
> delay(10);
> unsigned long time = millis();
> while(!Mirf.dataReady()){
> if (( millis() - time ) > 1000) {
> Serial.println(“timeout”);
> return;
> }
> }
> Mirf.getData(rxData);
> Serial.println((const char*)rxData);
> msgIndex += MIRF_PAYLOAD;
> if (msgIndex + MIRF_PAYLOAD > sizeof(msg)) {
> msgIndex = 0;
> }
> }
Quindi com’è ben visibile ho usato le MIRF. La cosa strana è che se uso come Client Arduino UNO e Server il Mega, ricevo le prime 32 Parole dal Client ma non ricevo nulla dal server, quindi ottengo un Timeout continuo. Se invece uso come Client il Mega e come Server arduino uno, sistemando i codici con i CE e i CSN relativi, non ricevo assolutamente nulla. Ho provato anche con altre librerie e ottengo solo una comunicazione unidirezionale, ma SOLO se invia Arduino Uno. La cosa assurda è che pensavo fosse un problema di sensore, ma ne ho comprati 6 e li ho provati tutti. Cosa può essere? Vi ringrazio in anticipo

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare. Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

nel server prova a spostare la memset dentro all'if, altrimenti cancelli il buffer mentre lui magari sta ancora inviando...