RCSwitch Library: erkennen ob Taster losgelassen wurde

Hallo,
kann mir einer von euch sagen, wie man mit der RCSwitch Library erkennen kann, ob ein Taster auf der Fernbedienung wieder losgelassen wurde?

Zeig mal deinen Sketch. Ich vermute du schreibst den Wert in einen Speicher um ihn von da aus weiter zu verarbeiten. Du könntest den z.b. nach jedem loop- Durchlauf einfach wieder auf 0 setzen.

Arbeitest du mit einer Switch- Case- Schleife kannst du das auch darüber steuern....

#define taste_1 5594115
bool taste_1_state;

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  
}

void loop() {
  if (mySwitch.available()) {
    
    uint32_t value = mySwitch.getReceivedValue();
    
    if (value == taste_1) taste_1_state = 1;
    else taste_1_state = 0;// hier möchte ich erkennen ob die Taste losgelassen wurde, schaltet nur um, wenn ich eine andere Taste drücke

    mySwitch.resetAvailable();
  }
  Serial.println( taste_1_state);
  
}

Der Code wird von der Fernbedienung so lange wiederholt, wie die Taste gedrückt wird. Die Befehle if (mySwitch.available()) {...} werden nur ausgeführt, wenn eine Taste gedrückt ist. Das ist also der falsche Ort zur Erkennung.
Du musst also das else zu if (mySwitch.available()) {...} setzen. Am besten mit einer Statusvariablen, so dass das nur einmal ausgeführt wird. Evtl. musst du noch eine Zeitabhängigkeit einbauen, wenn eine kurze Pause zwischen den Codewiederholungen ist.
Falls der Abstand zw. Fernbedienung und Empfänger größer wird, gibt es öfters Übertragungsfehler, so dass du fälschliches öfteres Loslassen in kurzer Zeit detektierst.

Was passiert wenn der Taster auf der Fernbedienung festgehalten bzw. wieder losgelassen wird hängt vom Protokoll ab, das die Fernbedienung verwendet. Es gibt mehrere:
RC-5 und RC-6
NEC
SONY ...

Edit: Sorry, hab da wohl was verwechselt... :roll_eyes:

@uxomm
Ich glaube du verwechselst da die IR-Ferbedienung mit der "Funk-Fernbedienung", um die es hier geht.
Die "RCSwitch" wird per Funk angesprochen. Das andere ist die "IRremote".

Ja, natürlich: Funk und nicht Infrarot - sorry, war im falschen Film!

uxomm:
Ja, natürlich: Funk und nicht Infrarot - sorry, war im falschen Film!

Aber deine Erklärungen sind für andere (IR-Nutzer) sicher hilfreich.
Edit
Schade, schon weg...

uxomm:
Was passiert wenn der Taster auf der Fernbedienung festgehalten bzw. wieder losgelassen wird hängt vom Protokoll ab, das die Fernbedienung verwendet. Es gibt mehrere:

RC-5 und RC-6
Zu jeder Taste gehören 2 Codes (z.B. 0x00C und 0x80C, sie unterscheiden sich in einem Bit: Bit-Toggling).
Wird eine Taste gedrückt und festgehalten, wird einer der beiden Codes immer wieder gesendet, solange die Taste gedrückt bleibt. Wird diese Taste losgelassen und nach kurzer Zeit noch einmal gedrück, wird der andere Code gesendet.
So kann unterschieden werden, ob eine Taste mehrmals hintereinander gedrückt wurde.
siehe Elektronik: IR-Fernbedienung, RC-5

NEC
Jede Taste hat (nur) einen Code.
Wird eine Taste gedrück und dann festgehalten, sendet die Fernbedienung EIN MAL den jeweiligen Code (z.B. FF50AF) und danach einen einheitlichen Wiederholungscode (z.B. FFFFFFFF) solange eine Taste gedrückt bleibt.
Diese Fernbedienungen sind meiner Meinung nach am einfachsten fürs "Hacking" zu verwenden, also um damit eigene Geräte zu steuern. Es sollte aber ein sicherer Empfang gewährleistet sein (Fernbedienung ist nahe am Empfänger).

SONY
Jede Taste hat (nur) einen Code (z.B. A9E).
Wird eine Taste gedrückt und festgehalten, wird dieser Code solange wiederholt, bis die Taste wieder losgelassen wird.
Sony-Geräte erwarten auf der Empfangsseite mehrere Wiederholungen (mindestens 3) des jeweiligen Codes.

Bei manchen Geräten kommen auch Kombinationen der oben erwähnten Protokollvarianten zum Einsatz. So ist es oft üblich, dass derselbe Code mehrfacht wiederholt werden muss, damit eine Reaktion erfolgt (nicht nur bei Sony).

Fand ihn auch hilfreich, selbst wenn es um die IR-Protokolle ging :slight_smile:

mit dem Ansatz von Theseus komme ich weiter, bei dauernd gedrückter Taste, wird das Signal alle 120ms wiederholt, d.h. wenn >120ms kein Signal kommt, wird die Taste nicht mehr gedrückt.