Moin
Ich versuche nun schon seit längerem einen Schalter einzulesen Mit einem Arduino Nano dies dann zu übertragen Mittels Nrf24l01 und mit einem Arduino und Nrf24l01 zu Empfangen und drauf hin einen Pin 4 High zu setzten um damit ein Relais an zusteuern. Ich bekomme es aber einfach nicht hin das der zweite Arduino meine Nachricht empfängt und den Pin High setzt.
Text im Vorfeld zu übertragen hat Funktioniert.
Danke schon mal im voraus für die Hilfe im Anschluss findet ihr den Code für Sender und Empfänger
Sender Code:
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "1RF24"; // Address / identifier
const int switchPin = 4; // Pin für den Schalter
void setup() {
Serial.begin(9600); // Serielle Kommunikation für Debugging
pinMode(switchPin, INPUT_PULLUP); // Schalter-Pin als Eingang setzen mit internem Pullup
radio.begin();
radio.openWritingPipe(address); // Set the address
radio.stopListening(); // Set as transmitter
Serial.println("Sender bereit.");
}
void loop() {
int switchState = digitalRead(switchPin); // Schalterzustand lesen
bool switchPressed = (switchState == LOW); // true, wenn Schalter gedrückt (LOW wegen Pullup)
bool success = radio.write(&switchPressed, sizeof(switchPressed)); // Zustand senden
if (success) {
Serial.println(switchPressed ? "Schalter gedrückt, Nachricht gesendet." : "Schalter nicht gedrückt, Nachricht gesendet.");
} else {
Serial.println("Senden fehlgeschlagen.");
}
delay(100); // Häufigere Übertragung
}
Empfänger Code
#include <SPI.h>
#include "RF24.h"
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "1RF24"; // Address / identifier
void setup() {
Serial.begin(9600);
pinMode(4, OUTPUT); // Setze Pin D4 als Ausgang
radio.begin();
radio.openReadingPipe(0, address); // Set the address for pipe 0
radio.startListening(); // Set as receiver
Serial.println("Empfänger bereit.");
}
void loop() {
if (radio.available()) {
bool switchPressed = false;
radio.read(&switchPressed, sizeof(switchPressed)); // Schalterzustand empfangen
if (switchPressed) {
digitalWrite(4, HIGH); // Pin D4 aktivieren, wenn Schalter gedrückt
Serial.println("Schalter gedrückt: Pin D4 aktiviert.");
} else {
digitalWrite(4, LOW); // Pin D4 deaktivieren, wenn Schalter nicht gedrückt
Serial.println("Schalter nicht gedrückt: Pin D4 deaktiviert.");
}
} else {
// Debug-Ausgabe, falls keine Nachricht empfangen wird
Serial.println("Warte auf Nachricht...");
}
delay(200); // Kurze Pause, um die Ausgabe zu verlangsamen
}
swichState beinhaltet den Pegel des Pins
Wenn switchState gleich Low Pegel, dann wird switchPressed true. Anderenfalls wird switchPressed false.
switchState sollte vielleicht lieber auch bool sein. Und generell kann man diese Zeilen anders/kürzer schreiben. Funktionieren sollte es aber von der Logic her. Oder was übersehe ich?
Beispiele funktionieren bei TO.
Nur wie man sieht in allen Beispielen es werden irgend eine Daten, Werte gesendet.
Ich verstehe nicht wie soll ein Bool gesendet werden
int switchState = digitalRead(switchPin); // Schalterzustand lesen
bool switchPressed = (switchState == LOW); // true, wenn Schalter gedrückt (LOW wegen Pullup)
bool success = radio.write(&switchPressed, sizeof(switchPressed));
normaler weise sollte das der Compiler anmeckern, muss jedoch kein exit geben.
Wen der TO low, high als Text sendet und danach auswertet wird es funktionieren,
Wie ist den das bei dir hat das mit meinem code funktioniert oder hattest du einen eigenen nicht das irgwas bei mir falsch verkabelt ist oder was weiß ich
Es ist möglich, nicht nur Text, sondern auch Daten zu senden!
Es ist sogar möglich Strukturen zu senden!
Wenn ich heute Abend Zeit finde, mach ich mal ein Testaufbau. nRF24l01+ liegen gerade auf dem Schreibtisch rum.
Es kann auch nicht so schwer sein, die Seriellen Ausgaben des Empfängers und des Senders zu posten!
Jede Aktion produziert in deinem Code eine Serielle Ausgabe. Daran ist ein Problem schnell erkannt.