I have a strange "Network Discovery" problem.
Context:
Libray: RF24 by TMRh0
Arduino: Nano model
Problem: slave nodes don't always respond
Hardware: working, the pingpair_dyn example run
Setup:
radio.setPALevel(RF24_PA_MAX);
radio.setDataRate(RF24_1MBPS);
radio.setChannel(0x66);
radio.setRetries(10, 10);
radio.setAutoAck(true);
Status:
Node Agent - v0.1.0
Node Id: 0x7 - 7
DynamicPayloads: DISABLE
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xa4a3a2a107 0xc2c2c2c2c2
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xa4a3a2a159
RX_PW_P0-6 = 0x20 0x00 0x00 0x00 0x00 0x00
EN_AA = 0x3f
EN_RXADDR = 0x03
RF_CH = 0x66
RF_SETUP = 0x07
CONFIG = 0x0f
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_MAX
My network have 3 node:
Node 1 with id 0x07 == 7 & address RX_ADDR_P0 == 0xa4a3a2a107
Node 2 with id 0x37 == 55 & address RX_ADDR_P0 == 0xa4a3a2a137
Node 3 with id 0x47 == 66 & address RX_ADDR_P0 == 0xa4a3a2a147
Only Pipe 0 is used.
Node 2 & 3 are always are listening, they never transmit, send only automatic ACK.
Node 1, on user prompt via button, run a discovery sending a simply payload (5 bytes)
for (i=from; i<to; i++) {
address[0] = i;
radio.openWritingPipe(address);
result = radio.write(&TxFrame, TxLen);
if (result) {
Serial.print("Node ");
Serial.print(i);
Serial.println(" - LIVE");
count++;
}
}
Node 1 always receives ACK from the others 2 nodes when discovery range is [50, 80]
Discovery From node: 50 - To node: 80
Node 55 - LIVE
Node 66 - LIVE
Nodes found: 2
Node 2 & 3 on serial terminal correctly show:
RxFrame len: 5
RX frame: 0x6162636400
Now, I have a problem with smaller discovery range as [50, 70].
Node 1 still receives ACK
Discovery From node: 50 - To node: 70
Node 55 - LIVE
Node 66 - LIVE
Nodes found: 2
BUT, now, Node 2 & 3 on serial terminal do not display anything !!!
This is the problem ![]()
Source code attached.
nodeAgent.ino (3.4 KB)




