Ich würde eine andere Strategie benutzen, ohne Master/Slave Zuordung.
Alle Knoten lauschen auf Pakete auf ihre Adresse,
wird eine Taste betätigt,
stopListening,
Absetzen des Kommandos an den entsprechenden Knoten,
hat das geklappt, wieder zum Lauschen übergehen,
ansonsten das Senden wiederholen.
Also etwa so (ohne Wiederholung der Sends im Fehlerfall):
#include <Bounce2.h>
// https://github.com/thomasfredericks/Bounce2
#include <RF24.h>
const byte pinTaste1 = 2;
const byte pinTaste2 = 3;
const byte leda = 6;
const byte ledb = 5;
const byte rxAddr[][6] = {"null", "eins", "zwei", "drei"};
RF24 radio(7, 8);
Bounce Taste1;
Bounce Taste2;
byte packet;
void setup() {
pinMode(leda, OUTPUT);
pinMode(ledb, OUTPUT);
Taste1.attach(pinTaste1, INPUT_PULLUP);
Taste2.attach(pinTaste2, INPUT_PULLUP);
Serial.begin(115200);
radio.begin();
radio.openReadingPipe(1, rxAddr[0]);
radio.setPALevel(RF24_PA_MIN);
radio.enableDynamicPayloads();
radio.startListening();
}
void loop() {
if (radio.available()) {
radio.read(&packet, sizeof(packet));
digitalWrite(ledb, packet);
}
bool taste1Betaetigt = Taste1.update();
bool taste2Betaetigt = Taste2.update();
if (taste1Betaetigt || taste2Betaetigt) {
radio.stopListening();
if (taste1Betaetigt) {
radio.openWritingPipe(rxAddr[1]);
packet = Taste1.fell();
radio.write(&packet, sizeof(packet));
}
if (taste2Betaetigt) {
radio.openWritingPipe(rxAddr[2]);
packet = Taste2.fell();
radio.write(&packet, sizeof(packet));
}
radio.startListening();
}
}
Für Tasten die gegen GND schalten, ohne externe PullUps oder PullDowns.