Salve a tutti, sto provando a far comunicare due arduino e mi succede una cosa alquanto strana:
Un arduino nano fa da ricevitore, un uno fa da trasmettitore. Il codice è banale, l'uno manda la stringa "test" e la nano la stampa sul seriale alla ricezione.
Il problema è che, l'arduino uno invia la stringa una volta sola precisamente quando apro il monitor seriale dall'IDE. Se chiudo e riapro il seriale ne rimanda un'altra, e così via.. Tutto ciò mi stranizza perché la funzione loop è veramente banale (ha solo la funzione write del modulo praticamente) e il codice è identico a mille mila sketch trovati sul web.
La mia idea è che sia un problema di potenza (uso entrambi gli arduino alimentati dal mio portatile) e quando apro il monitor seriale la porta usb dia più corrente all'uno e quindi il modulo funzioni.. ma è un'idea. Pareri? 
Stiamo ancora aspettando che ti presenti.
Quindi , nel rispetto del regolamento, ti chiediamo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO... Grazie.
Qui una serie di link utili, non inerenti al tuo problema:
Fatto, scusate per la dimenticanza.
ora per completare l'opera basta solo che posti il codice altrimenti diventa difficile risponderti 
e...
magari anche il circuito 
Ricevitore
#include <SPI.h>
#include "RF24.h"
//CE 5 e CSN 10
RF24 radio(5,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
void setup(){
radio.begin();
radio.openReadingPipe(1, pipe);
radio.startListening();
Serial.begin(9600);
Serial.println("Start");
}
void loop(){
if(radio.available()){
bool done = false;
while (!done) {
done = radio.read(msg, 1);
Serial.write(msg[0]);
}
}
}
Trasmettitore
#include <SPI.h>
#include "RF24.h"
//CE 5 e CSN 10
RF24 radio(5,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
void setup(void){
radio.begin();
radio.openWritingPipe(pipe);
}
void loop(void){
msg[0] = 42;
radio.write(msg, 1);
}
Il circuito è semplicissimo, ci sono solo collegati i due moduli ai due arduino (ho smontato tutti gli altri componenti perché non riesco a trovare l'errore).
PS: Questo sketch è preso da internet, ma uguale al mio, ed inoltre una volta solo ha funzionato. trovo il tutto molto strano.
boh non conosco bene il protocollo ma ho trovato questo 
// read and write expect a reference to the payload (& symbol)
// second argument is the packet length in bytes (sizeof(int) == 2)
radio.write(&transmitterId, 2);
tu msg l'hai dichiarato int ma sia in read che write hai messo 1 inoltre msg non l'hai passato per referenza
io l'ho tratto da qui
in più non essendoci nemmeno una pausa il messaggio viene trasmesso (teoricamente) migliaia di volte al secondo, immagino si incricchi qualcosa...
Allora, ho modificato il codice di conseguenza (ma il risultato non è cambiato, anzi, ora non mi fa più nemmeno il giochetto con il monitor seriale)
trasmitter
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int transmitterId;
// Set up nRF24L01 radio on SPI bus plus pins 9 & 10
//Contacts from the radio to connect NRF24L01 pinamnam -> Arduino
//SCK -> 13
//MISO -> 12
//MOSI -> 11
//CSN -> 10
//CE -> 9
RF24 radio(9, 10);
// this is not the channel address, but the transmitter address
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup(void) {
Serial.begin(9600);
// CHANGE THIS PER EACH TRANSMITTER, from 0 to 4
transmitterId = 42;
radio.begin();
// the following statements improve transmission range
radio.setPayloadSize(2); // setting the payload size to the needed value
radio.setDataRate(RF24_250KBPS); // reducing bandwidth
radio.openWritingPipe(pipe); // set the transmitter address
}
void loop(void) {
radio.powerUp();
if(radio.write(&transmitterId, 2)){
Serial.println("Mandato");
}else{
Serial.println("Errore");
}
delay(50);
}
receveir
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int senderId;
// Set up nRF24L01 radio on SPI bus plus pins 9 & 10
//Contacts from the radio to connect NRF24L01 pinamnam -> Arduino
//SCK -> 13
//MISO -> 12
//MOSI -> 11
//CSN -> 10
//CE -> 9
RF24 radio(9, 10);
// this is not the channel address, but the transmitter address
const uint64_t pipe = 0xE8E8F0F0E1LL;
//LEDs connected to these pins
// ENSURE YOU HAVE THE RIGHT DIGITAL PINS HERE
int LEDpins[5] = { 2, 3, 4, 5, 6 };
void setup(void) {
Serial.begin(9600);
radio.begin();
// the following statements improve transmission range
radio.setPayloadSize(2); // setting the payload size to the needed value
radio.setDataRate(RF24_250KBPS); // reducing bandwidth
radio.openReadingPipe(1, pipe); // Open one of the 6 pipes for reception
radio.startListening(); // begin to listen
Serial.println("START:");
}
void loop(void) {
if (radio.available()) {
// this while is here to throw away all the packets but the last one
bool done = false;
while (!done) {
// read and write expect a reference to the payload (& symbol)
// second argument is the packet length in bytes (sizeof(int) == 2)
done = radio.read(&senderId, 2);
}
Serial.print("Ricevuto: ");
Serial.println(senderId);
delay(50);
}
}
Nella documentazione della libreria ho letto che radio.write() restituisce true se va a buon fine, in effetti noto che sulla seriale del trasmettitore leggo sempre "Errore"
si ma anche un'attsa di 50 millisecondi è pochina, significa una trasmissione di 20 volte al secondo.
comunque prova questi codici (tx e rx) e vedi se funziona...
qui