Buongiorno,
grazie al vostro consiglio sono uscito dal loop 
Ho finalmente il sitema che funziona come volevo io, dandomi un messaggio quando la trasmissione si interrompe.
Ora procederò con il resto del codice.
Vi allego i nuovi listati.
Codice Trasmettitore
/*
Encoder: legge i dati dall'encoder e li trasmette grezzi (numero di step) al ricevitore il quale
li convertirà in angolo da visualizzare sul display.
* modulo nrf24
* CE 9
* SCN 10
* mosi 11
* miso 12
* sck 13
* pulsante 1 4
* pulsante 2 5
* pulsante 3 6
* pulsante 4 7
*
*/
#include <RF24.h>
#include <nRF24L01.h>
#include <SPI.h>
#include "printf.h"
#define DEBUG //if not commented out, serial.print is active!
/* encoder*/
#define encoderPin1 3
#define encoderPin2 2
#define risoluzioneEncoder 0.05 /* INSERIRE QUI VALORE ENCODER uguale anche nel programma COTO 360/7200=0.05, se usiamo in quadratura va 360/28800
* http://www.sciamannalucio.it/arduino-encoder-conta-impulsi-giri-motore/
* tecnicamente adesso la risoluzione si ottiene con 360/7200 perchè (vedi sezione encoder) usiamo un solo fronte per il conteggio e non 4 */
volatile int lastEncoded = 0;
volatile long encoderValue = 0;
float Angolo = 0;
long lastencoderValue = 0;
int lastMSB = 0;
int lastLSB = 0;
/* endocder */
/*Variabili network */
RF24 radio(9, 10); // nRF24L01 (CE,CSN)
const uint64_t add1 = 0xf0f0f0f0e1LL;
char msg[20];
char Ack[20];
boolean transmissionState;
static unsigned long previousSuccessfulTransmission;
/*Variabili network */
void setup() {
/* Setup network */
radio.begin();
radio.enableAckPayload(); // Allow optional ack payloads
radio.setPALevel(RF24_PA_MAX);
radio.openWritingPipe(add1); // Both radios listen on the same pipes by default, and switch when writing
/* Setup network */
/* Debug*/
#ifdef DEBUG
Serial.begin (115200);
printf_begin();
radio.printDetails();
#endif
/*Debug*/
/* encoder*/
pinMode(encoderPin1, INPUT_PULLUP);
pinMode(encoderPin2, INPUT_PULLUP);
attachInterrupt(0, updateEncoder, CHANGE);
attachInterrupt(1, updateEncoder, CHANGE);
/* encoder*/
}
void loop() {
Angolo = encoderValue*risoluzioneEncoder;
if(radio.write(&encoderValue,sizeof(encoderValue)))
{
#ifdef DEBUG
Serial.println(encoderValue);
#endif
if(radio.isAckPayloadAvailable())
{
radio.read(Ack,sizeof(Ack));
#ifdef DEBUG
Serial.print("Received an Ack: ");
Serial.println(Ack);
#endif
previousSuccessfulTransmission = millis();
}
}
if (millis() - previousSuccessfulTransmission > 1500)
{
transmissionState = false;
#ifdef DEBUG
Serial.println("Data transmission error, check receiver!");
#endif
}
else
{
transmissionState = true;
#ifdef DEBUG
Serial.println("Data successfully transmitted");
#endif
}
}
/* routine encoder, non toccare!*/
void updateEncoder(){
int MSB = digitalRead(encoderPin1); //MSB = most significant bit
int LSB = digitalRead(encoderPin2); //LSB = least significant bit
int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number
int sum = (lastEncoded << 2) | encoded; //adding it to the previous encoded value
if(sum == 0b1101 /*|| sum == 0b0100 || sum == 0b0010 || sum == 0b1011*/) encoderValue ++; // modificato per non lavorare in quadratura
if(sum == 0b1110 /*|| sum == 0b0111 || sum == 0b0001 || sum == 0b1000*/) encoderValue --; // modificato per non lavorare in quadratura
lastEncoded = encoded; //store this value for next time
}
/* routine encoder, non toccare!*/
codice Ricevitore:
/*
Ricevitore per Encoder: riceve un segnale grezzo dall'encoder (numero di step) e lo converte in un angolo
da visualizzare sul display .
* modulo nrf24
* CE 9
* SCN 10
* mosi 11
* miso 12
* sck 13
* pulsante 1 2
* pulsante 2 3
* pulsante 3 4
* pulsante 4 5
*
*/
#include <RF24.h>
#include <nRF24L01.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
#include "printf.h"
#define risoluzioneEncoder 0.05 // INSERIRE QUI VALORE ENCODER uguale anche ne programma kren 360/7200=0.05 ma adesso va 360/2850
#define DEBUG //if not commented out, serial.print is active!
/* variabile display*/
LiquidCrystal_I2C lcd(0x27,16,2);
/* variabile display*/
/*variabile network */
RF24 radio(9,10); // nRF24L01 (CE,CSN)
const uint64_t add1 = 0xf0f0f0f0e1LL;
char msg[20];
boolean transmissionState;
static unsigned long previousSuccessfulTransmission;
/*variabile network */
/* conversione Angolo */
float Angolo;
long encoderValue;
/* conversione Angolo */
/*Variabili Pulsanti */
int pulsante_1 = 0;
int pulsante_2 = 0;
int pulsante_3 = 0;
int pulsante_4 = 0;
/*Variabili Pulsanti */
void setup() {
/* Setup network */
radio.begin();
radio.enableAckPayload(); // Allow optional ack payloads
radio.setPALevel(RF24_PA_MAX);
radio.openReadingPipe(1,add1);
radio.startListening(); // Start listening
/* Setup network */
/* parte display i2c */
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Crankshaft");
lcd.setCursor(0,1);
lcd.print("Wireless reader");
delay(200);
/* parte display i2c */
/* Debug*/
#ifdef DEBUG
Serial.begin(115200);
printf_begin();
radio.printDetails();
#endif
/* Debug*/
}
void loop() {
if(radio.available())
{
radio.read(&encoderValue,sizeof(encoderValue));
radio.writeAckPayload(1,"received",15);
previousSuccessfulTransmission = millis();
}
if (millis() - previousSuccessfulTransmission > 1000)
{
transmissionState = false;
#ifdef DEBUG
Serial.println("Data transmission error, check Transmitter!");
#endif
lcd.clear();
lcd.setCursor(0,0);
lcd.println("NO CONNECTION ");
lcd.setCursor(0,1);
lcd.println("Check Encoder ");
delay(200);
}
else
{
transmissionState = true;
#ifdef DEBUG
Serial.println("Data successfully received");
Serial.println(encoderValue);
#endif
Angolo = encoderValue*risoluzioneEncoder;
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Angolo:");
lcd.setCursor(4,1);
lcd.print(Angolo);
lcd.setCursor(10,1);
lcd.print("Gradi");
delay(200);
}
}
Tanto per curiosità quali sarebbero secondo voi le alternative a questo modulo?
Quantomeno per imparare qualcosa di nuovo 