Hallo
Ich habe ein Problem mit Nrf24l01.Ich habe 2 Uno als TX und einen Uno als RX.Die Kopplung der Geräte ist mir gelungen da ein bisschen Kenntnisse durch anderes Projekt vorhanden sind. Ich bekomme von beiden Sendern jeweils ein float und kann mir dies auch seriell anschauen.Mein Problem bei der Sache schalte ich einen Sender aus werden die Daten des anderen in die Variable des ausgeschalteten geschrieben. Meine Frage wo muss ich ansetzen das bei Ausfall eines Senders nicht die Daten des anderen übernommen werden. Mit diesem einfachen Sketch den ich für den RX benutze wird das meiner Meinung nichts.Habe aber auch keine Idee nach 2 Abenden mehr wo der Hebel anzusetzen ist. Vielleicht kann mir jemand auf die
Sprünge Helfen.
Wenn du mit 2 Sendern arbeitest, die unabhängig voneinander senden, dann wirst du immer Probleme bekommen.
Du musst diese Sender synchronisieren bzw. zum Senden auffordern.
Dazu muss jeder Sender eine ID vorweg senden, an der der Empfänger erkennt welcher Sender das Signal gesendet hat.
Danach kannst du die Auswertung vornehmen.
Du benutzt ungünstige Adressen (4 der 5 Bytes sind 0).
Dein Programm liest zwei Pakete, wenn eines empfangen wurde.
Delays in einem Programm das kommunizieren soll, sind kontraproduktiv.
Danke für eure Tipps.
Whandall dein Code hat zum Erfolg geführt. Ich hatte auch schon in dieser Richtung probiert aber Mangels an Erfahrung nicht richtig if (radio.available(pipes[1])) konnte ja auch nicht funktionieren wenn ich mir deinen Code anschaue. Wie so oft sitzt das Problem 50 cm vor dem Monitor.
mfG
Thorsten4171
PS
Das delay wird noch durch millis ersetzt. Wenn ich es ohne Pause laufen lasse verschluckt sich manchmal der Empfänger.
Hallo Whandall
Mit verschlucken meine ich folgendes: gelesen und ausgegeben wird temp1 temp2 temp1 temp2.... usw
ohne delay aber temp1 temp2 temp1 temp1 temp2 usw
Wobei kein festes Muster zu erkennen ist wann temp2 ausgelassen wird.
Die übertragung soll nicht so oft geschehen , der Hintergrund dieser 3 Codestücke ist das ich erst eine sauber Verbindung ohne Fehler hienbekomme möchte und erst dann mit den Dingen weitermache wozu die sache gedacht ist zB Temp übertragen Licht und Wasserpumpe an aus schalten etc.Der Taster im Sketch simuliert nur einen Stromausfall damit ich in der Versuchsphase nicht immer den USB Stecker rausfummeln muß.
Das mit dem Licht und der Pumpe läuft schon .Jezt soll die Sache erweitert werden um ein angedachtes Gewächshaus zu steuer und zu überwachen.
In diesem Teil dachte ich andere Aufgabe wie Temp lesen Bewässerung ein aus schalten etc. zu erledigen.
Solche Anweisungen schreibe ich mir immer wieder rein um zu begreifen wo ich im Programm bin und was es macht. Hoffe das ist nicht falsch und kontraproduktiv
Thorsten4171:
Danke ich interpretiere das als "bin auf dem richtigen Weg"
Ja, der Interpretation stimme ich zu.
Und als Trost: Die Beschreibung von radio.available() steht an der einen, die von radio.available(&fromPipe) deutlich weiter hinten, da bin ich auch nicht drauf gekommen. Da ist es gut, wenn man jemanden findet, der diese Hürde schon überwunden hat. @Whandall: Das war jetzt ein Lob
Wenn etwas nicht funktioniert sind Debugausgaben natürlich absolut in Ordnung,
einen richtigen Debugger hat man ja nicht zur Verfügung.
Für Statusanzeigen könntest du LEDs an freie Pins hängen,
Pin-I/O ist höllenschnell gegenüber serieller Ausgabe.
Noch etwas das mir auffiel:
radio.write(&temp2, sizeof(temp2));
Du wertest den Rückgabewert dieser Funktion nicht aus, das ist zumindestens in der Testphase
nicht besonders clever.
Wenn die Funktion erfolgreich war, hat der Empänger die Nachricht erhalten und bestätigt,
ansonsten könnte die Übertragung oder die Bestätigung gestört sein.
Im Datenblatt findest du alle möglichen Scenarien beschrieben.