I purchased a RFM12PI to send data from my Arduino nodes to my Raspberry PI via RFM12B radios. I am using the RFM12PI with the pre-installed firmware without any modifications.
I wrote a scetch which sends the data and the RFM12PI does receive the data. My problem is that the nodes never receive any ACKs from the RFM12PI.
I use the following code for my Arduino nodes:
for (byte i = 0; i <= 5; ++i) { // tx and wait for ack up to 5 times
rf12_sleep(-1); // Wake up RF module
while (!rf12_canSend())
rf12_recvDone();
rf12_sendStart(RF12_HDR_ACK, &paylod, sizeof paylod);
rf12_sendWait(2); // Wait for RF to finish sending while in standby mode
boolean acked = waitForAck(); // Wait for ACK
rf12_sleep(0); // Put RF module to sleep
if (acked) {
return;
} // Return if ACK received
Sleepy::loseSomeTime(5000); // If no ack received wait 5s and try again
}
static byte waitForAck() {
MilliTimer ackTimer;
while (!ackTimer.poll(5000)) { // try to receie an ACK for max. 5 seconds
if (rf12_recvDone() && rf12_crc == 0 &&
rf12_hdr == (RF12_HDR_DST | RF12_HDR_CTL | myNodeID)) {
return 1;
}
}
return 0;
}
I also tried a less strict check for the header - no success either:
static byte waitForAck() {
MilliTimer ackTimer;
while (!ackTimer.poll(5000)) { // try to receie an ACK for max. 5 seconds
if (rf12_recvDone() && rf12_crc == 0) {
return 1;
}
}
return 0;
}
The function waitForAck always returns 0. Unfortunately I can not debug the code except by "LED debugging) which makes it quite hard to trace the problem.
Does Anybody have any ideas?
How can I check whether the RFM12PI is sending the ACKs as requested?
No ACKs from RFM12PI
Submitted by Guest on Tue, 07/01/2014 - 00:31Hi,
I purchased a RFM12PI to send data from my Arduino nodes to my Raspberry PI via RFM12B radios. I am using the RFM12PI with the pre-installed firmware without any modifications.
I wrote a scetch which sends the data and the RFM12PI does receive the data. My problem is that the nodes never receive any ACKs from the RFM12PI.
I use the following code for my Arduino nodes:
for (byte i = 0; i <= 5; ++i) { // tx and wait for ack up to 5 times
rf12_sleep(-1); // Wake up RF module
while (!rf12_canSend())
rf12_recvDone();
rf12_sendStart(RF12_HDR_ACK, &paylod, sizeof paylod);
rf12_sendWait(2); // Wait for RF to finish sending while in standby mode
boolean acked = waitForAck(); // Wait for ACK
rf12_sleep(0); // Put RF module to sleep
if (acked) {
return;
} // Return if ACK received
Sleepy::loseSomeTime(5000); // If no ack received wait 5s and try again
}
static byte waitForAck() {
MilliTimer ackTimer;
while (!ackTimer.poll(5000)) { // try to receie an ACK for max. 5 seconds
if (rf12_recvDone() && rf12_crc == 0 &&
rf12_hdr == (RF12_HDR_DST | RF12_HDR_CTL | myNodeID)) {
return 1;
}
}
return 0;
}
I also tried a less strict check for the header - no success either:
static byte waitForAck() {
MilliTimer ackTimer;
while (!ackTimer.poll(5000)) { // try to receie an ACK for max. 5 seconds
if (rf12_recvDone() && rf12_crc == 0) {
return 1;
}
}
return 0;
}
The function waitForAck always returns 0. Unfortunately I can not debug the code except by "LED debugging) which makes it quite hard to trace the problem.
Does Anybody have any ideas?
How can I check whether the RFM12PI is sending the ACKs as requested?
Thx, chris