Hallo zusammen,
kurze Frage zum Verständniss.
Habe einen Empfänger der immer in Betrieb ist und eine LED schaltet sobald der Sender das entsprechende Signal sendet.
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
int led =4 ;
void setup() {
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2
pinMode(led,OUTPUT);
}
void loop() {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value == 1111) {
digitalWrite(led,HIGH);
}
mySwitch.resetAvailable();
}
else
digitalWrite(led,LOW);
}
jetzt möchte ich gerne, das die LED auf LOW geschaltet wird, sobald kein Signal mehr kommt, doch das bekomme ich nicht hin. Müsste es nicht nach dem Code so fuktionieren oder habe ich einen Gedankenfehler?
Dann müsstest du das "else" + LOW-Anweisung direkt hinter die "HIGH-Anweisung" setzen.
Aber die Klammersetzung dabei beachten.
Berichtigung: Das geht so nicht.
OlyK:
habe es so verstanden und umgesetzt, doch funktioniert auch nicht.
Ja, sorry. Das stimmt.
Es geht nicht mit der RCSwitch.
Da der Sketch sehr schnell durchrennt, geht die Led gleich wieder aus.
Man könnte es mit einem delay evtl. umgehen.
Nicht schön aber selten.
Hier ein Beispiel:
void loop() {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value == 1111)
{
digitalWrite(led, HIGH);
delay(500);
}
mySwitch.resetAvailable();
digitalWrite(led, LOW);
}
}
Edit:
Aber beachte bitte, bei der RCSwitch geht es nicht, so lange du den Code sendest, bleibt die Led an.
Das hatte ich ja auch so geschrieben.
Der Code den du sendest, wird nicht dauernd gesendet, sondern gepulst.
Damit funktioniert es nicht so, wie du möchtest.
Du musst es dann per Sketch überbrücken, also die Pausen füllen.
OlyK:
Der Code wird meinerseits ständig gesendet würde ich sagen
Nein, das sieh dir mal im Empfänger per Serial-Monitor an.
Ein Beispiel habe ich nicht, da ich es noch nicht gebraucht habe.
Einfach im Sketch mehrfach in einer Schleife prüfen ob der Code noch identisch ist.
Wenn nicht schleife verlassen und Led ausschalten.
OlyK:
läßt es sich mit einer anderen Lib besser realisieren?
Ich kenne keine.
Liegt auch daran, dass du offiziell keine "Daueraussendung" machen darfst.
Also evtl. selbst programmieren
Alternative:
Du steuerst doch deinen Funk-Code irgendwie.
Wenn z.B. Taster LOW, dann code senden, wenn Taster wieder HIGH, dann anderen Code senden und darüber Led ausschalten.
Ja der Code wird gesendet sobald der Microcontroller unter Strom steht. Sobald es wieder abgeschaltet wird, wird kein Code mehr gesendet und dann sollte der Empfänger abschalten.
OlyK:
Ja der Code wird gesendet sobald der Microcontroller unter Strom steht. Sobald es wieder abgeschaltet wird, wird kein Code mehr gesendet und dann sollte der Empfänger abschalten.
Na dann hoffe mal, dass du keine Probleme bekommst.
Die von dir verwendete Frequenz ist nicht für dich allein da, sondern wird von vielen anderen auch genutzt.
Dauersenden ist absolut untersagt.
Aber auch für dieses Problem gibt es eine Lösung.
Beim einschalten wird einmalig ein Code gesendet.
Beim abschalten zuvor ein anderer Code der wiederum die Led ausschaltet.
OlyK:
ich meine damit nicht rund um die Uhr aber ein paar Minütchen könnten es schon sein.
Wie würde ich es hinbekommen, das wenn der Strom abgeschaltet wird, er vorher noch sendet? Der Strom wird mechanisch abgeschaltet.
Diese Minuten können schon andere Anwender dieser Frequenz beträchtlich stören.
Es gibt 2 Lösungen, abhängig des verwendeten Controllers, dafür.
Einen großen Elko für die Betriebsspannung. Dieser puffert die Spannung lang genug, um noch den Code zu senden.
Mit einer elektronischen Selbsthaltung, die vom Sketch ausgeschaltet wird, wenn der Abschaltcode gesendet wurde.
Beides wurde hier oder im Web schon öfter diskutiert.
OlyK:
Das klingt gut und gibt Anregung für neue Versuche. Danke
Ich habe es jetzt so gelöst, das wenn der Code eine Sekunde lang nicht mehr empfangen wurde, die LED ausgeschaltet wird.
danke
Ok, das ist auch ein Weg. Ich hoffe nur, dass du dadurch kein Probleme durch Andere bekommst.
Du könntest ja auch die Abfragezeit verlängern und gleichzeitig die Sendeintervalle entsprechend dehnen.
Dann haben andere Sender eine Chance auch zu senden.
Im Zweifelsfall (wenn es zu viele Beschwerden gibt) schlägt die Bundesnetzagentur zu, misst das aus, zieht die Sendeanlage ein und verhängt ein heftiges Bußgeld zuzüglich der Kosten des Messeinsatzes - das Bußgeld ist der geringere Anteil.