Der folgende Code kompiliert auf Arduino und Himbeere:Preprocessor/bedingte Variablendefinition
#if defined(ARDUINO)
const Channel channel1{1,uint64_t(0xF0F0F0F0A2LL),uint64_t(0xF0F0F0F0A1LL)};
const Channel channel2{2,uint64_t(0xF0F0F0F0B2LL),uint64_t(0xF0F0F0F0B1LL)};
#else
const Channel channel1{1,uint64_t(0xF0F0F0F0A1LL),uint64_t(0xF0F0F0F0A2LL)};
const Channel channel2{2,uint64_t(0xF0F0F0F0B1LL),uint64_t(0xF0F0F0F0B2LL)};
#endif
zweiten param ist die in-Kanal Drittel der Out-Kanal ist.
Mit der Preprozessor-Bedingung werden diese Kanäle (Pipes RF24)) vertauscht. Die Kommunikation läuft mehr oder weniger über RX/TX (vereinfacht). Lesekanal auf der Clientseite ist der Schreibkanal auf der Serverseite und umgekehrt.
Dies macht es möglich, den gleichen Code auf dem Client und auf dem Server zum Beispiel zu schreiben:
RF24Client client1(radio, channel1);
client1.enableReading();
...
client1.write(...)
Schließlich meine Frage: Das funktioniert, aber ich bin nicht sicher, ob dieser „gute Stil“ oder Mist versteckt hinter einem Präprozessor-Ausdruck.
Ich weiß, ich weiß - normalerweise könnten/sollten Sie dieses Problem mit einer Schnittstelle und auf dem Heap über Zeiger/Smartpointer lösen. Aber dynamischer Speicher ist ein bisschen ein Problem auf den kleinen Geräten ...
Whoops, brauchen auch 'K3' und' K4' für die Werte, die auf 'B1' und' B2' enden. –
Das war schnell - danke. Sieht besser aus als mein Ansatz. Aber ich habe 2 Kanäle mit 4 Adressen: xxA1, A2, B1, B2 (jeder Kanal hat 2 verschiedene Adressen). Ich benutzte 2 Kanäle für dieses Beispiel - reale Anwendung hat 5 Kanäle ... huhhh Sie sahen es bereits ... –
Vielleicht sollte ich eine "Paar-Klasse" definieren (kann nicht STL auf Arduino verwenden) und etwas wie const myPair tun Paar1 (0x..A1,0x..B1); - führt mich zu meiner zweiten Frage: Ein Grund warum du define verwendest und nicht const? Erinnerung? –