Hey TMRh2O, first of all, thanks for your help. I feel like I'm starting to get somewhere. I got another chance to work on this today and found out something I don't understand. Could you test one more thing for me? Everything seems to work great for me (with your code and mine) if the delay between transmissions is always the same. So your code works. However, my transmissions in the real application will not be at regular intervals (triggered by a sensor). As soon as I simulate this by putting a random delay in the transmit loop, like below, I start to get instances where the tx increments sendcount, and the rx does not. Can you replace this section of your code with the code below and see if it still works without glitches?
else { // if role is not base station[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
radio.powerUp(); // Power up the radio after sleeping [color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
// printf("Now sending... %d \n\r",role); // print role[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
unsigned long trytime = 3000; // max transmit time[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
unsigned long startsend = millis(); // when transmit started[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
while( millis() - startsend < trytime){ // for up to trytime, keep sending[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
if(radio.write(&role, sizeof(role))){ // if it got an ack, stop trying to send[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
sendCounter++;[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
break;[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
}[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
else{ // if it didn't get an ack[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
// pick the next frequency[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
if(ch_index<4){[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
ch_index++;[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
}[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
else{[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
ch_index = 0;[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
}[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
// go to that frequency[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
printf("Ch %d\n",ch[ch_index]);[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
radio.setChannel(ch[ch_index]);[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
}[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
}[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
// by now, it either sent ok or timed out[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
delay(random(1000,1500)); // why delay here? it was in an example, so I copied it.[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
// Power down the radio. [color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
radio.powerDown(); // NOTE: The radio MUST be powered back up again manually[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
Serial.println(sendCounter);[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
//go_to_sleep(); // Sleep the MCU.[color=#222222][font='DejaVu Sans Mono', Monaco, Consolas, monospace][/font][/color]
}