Ich hatte dir in Post #11 zwei Links gepostet.
Warum baust du das nicht danach auf. So wird das sicher funktionieren.
Client:
id ist ein int und hat immer 1
byte thisSlaveAddress = 1;
byte slaveAddress = 0;
radio.begin();
radio.setPALevel(RF24_PA_HIGH);
radio.setDataRate( RF24_2MBPS );
radio.setChannel(50);
radio.setRetries(15, 15); // delay, count
radio.openReadingPipe(1, id);
radio.openWritingPipe(slaveAddress);
radio.startListening()
Master:
Sendet an verschiedene Clients ein int zwischen 11 und 77
byte thisSlaveAddress = 0;
byte slaveAddress = 1;
radio.begin();
radio.setPALevel(RF24_PA_HIGH);
radio.setDataRate( RF24_2MBPS );
radio.setChannel(50);
radio.setRetries(15, 15); // delay, count
radio.openReadingPipe(1, thisSlaveAddress);
radio.startListening();
so wird es im Programm aufgerufen:
radio.stopListening();
dataToSend = erstefarbe + (zweitefarbe * 10);
radio.openWritingPipe(random(1, AnzahlClients));
send();
radio.startListening();
void send() {
bool rslt;
rslt = radio.write( &dataToSend, sizeof(dataToSend) );
Serial.print("Data Sent ");
Serial.print(dataToSend);
if (rslt) {
Serial.println(" Acknowledge received");
}
else {
Serial.println(" Tx failed");
}
}
Ich hatte so viele Links, ich dachte, er wäre das... ich probiere es nochmal damit...
Ich hatte damit Probleme, wenn die WritingPipe Adresse des Senders, die gleiche Adresse wie die ReadingPipe0 des Empfängers hat.
Die Adressen sind bei mir aber anders aufgebaut.
uint8_t address[][6] = {"1Sens", "2Sens", "3Sens", "4Sens", "5Sens", "6Sens"};
Beim Sender wird folgende Writing Pipe geöffnet
radio.openWritingPipe(address[1]); // Erstellt Sendekanal mit Addresse
Beim Empfänger lausche ich auf alle 6 Adressen
for(int i=0; i<6; i++){
radio.openReadingPipe(i, address[i]); // Erstellt Empfangskanal mit Nummer (0-5) mit Addresse
}
Wenn ich beim Sender die WritingPipe auf address[0]
erstellt hatte, hatte ich auch Probleme mit dem ACK.
Aber schon ne Weile her. Aber da war was
dies hier ist für mich unverständlich:
uint8_t address[][6] = {"1Sens", "2Sens", "3Sens", "4Sens", "5Sens", "6Sens"};
uint8_t aber Strings?
Ich wollte weniger Speicher verwenden, deswegen nur bytes als adressen...
Die Writing Pipe ist doch ein Zufallswert zwischen 1 und anzahl der Clients. die Reading Pipe ist doch 0, es sollte also immer unterschiedlich sien.
Ich hätte jetzt bei mehreren Clients alle auf die adresse 0 schreiben lassen... ist das ein Fehler?
Ok, kein Problem. Dann noch mal den Tipp mit diesem Tutorial und da ab Post #3. Der hat bei mir sofort funktioniert.
Das ist absoluter Quatsch.
oh, das habe ich sogar genutzt...
ich habe nur die Adresse geändert:
const byte slaveAddress[5] = {'R','x','A','A','A'};
das brauchte ich gar nicht so aufwendig, deswegen einfach zu ein byte geändert.
Ich vermute eine nicht ausreichende Stromversorgung der NRFs.
Testweise kannst du die beiden NRFs ja mal mit 2 AA Batterien betreiben,
wenn das auch nicht funktioniert liegt der Fehler doch woanders.
GNDs wird dabei natürlich mit GND des Arduinos verbunden.
Warum ?
Du solltest den kompltten Sketch verwenden, so wie er vorgegeben ist, dann klappt das auch. Anschließend kannst du deine Änderungen einpflegen und immer testen.
Das mit der Stromversorgung ist ein wichtiger Hinweis von @Whandall
Hi, das mit der Stromversorgung werde ich mal weiter untersuchen... ich habe ja schon Kondensatoren hinzugefügt, aber wenn es insgesamt unter Last zu wenig Spannung gibt, kann es echt sein.
habe grade mal statt den USB Ports ein Steckernetzteil genommen und in einer Konstellation ging gar nichts mehr...
Also werde ich mal eine ordentliche Spannungsversorgung nutzen und berichten.
Zu einer guten, stabilen Spannungsversorgung zählt auch ein guter Kondensator.
Tantal Elkos sind da die bessere Wahl, oder noch besser keramische Kondensatoren.
Ich verwende meist 47yF keramisch plus einem 47yF Tantal. Das bei 3,3Volt mit einem LM1117 3,3V.
Da klappt das immer. Die 3,3V aus einem Arduino reichen da nicht.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.