RCSwitch Frage

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?

Gruß

Dann müsstest du das "else" + LOW-Anweisung direkt hinter die "HIGH-Anweisung" setzen.
Aber die Klammersetzung dabei beachten.
Berichtigung: Das geht so nicht.

Hallo und danke für die Antwort.

habe es so verstanden und umgesetzt, doch funktioniert auch nicht.

#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);
      
              
             }
             else
             {digitalWrite(led,LOW);
             }

    mySwitch.resetAvailable();
  }
 
}

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.

So ist die LED nur am blinken.

Die LED sollte auch solange an bleiben, solange der Code gesendet wird und ausgehen sobald der Code nicht mehr gesendet wird.

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.

Sorry, bitte kleines Beispiel wie ich die Pausen fülle.

Der Code wird meinerseits ständig gesendet würde ich sagen

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.

läßt es sich mit einer anderen Lib besser realisieren?

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.

ich meine damit nicht rund um die Uhr :slight_smile: 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.

OlyK:
ich meine damit nicht rund um die Uhr :slight_smile: 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.

  1. Einen großen Elko für die Betriebsspannung. Dieser puffert die Spannung lang genug, um noch den Code zu senden.
  2. Mit einer elektronischen Selbsthaltung, die vom Sketch ausgeschaltet wird, wenn der Abschaltcode gesendet wurde.
    Beides wurde hier oder im Web schon öfter diskutiert.

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

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.

Gruß Tommy