NEWS
(gelöst)ioBroker mit jeder IR-Fernbedienung (Arduino-USB)
-
Hallo,
ich versuche einen Arduino (Mega2560) per USB mit ioBroker zum laufen zu bringen.
Möchte einen IR-Receiver auslesen und diesen Wert weitergeben. Es klappt auch soweit, dass ich mit dem Arduino auf dem seriellen Monitor sehe das ich eine Taste gedrückt habe.
Ich sehe dieses auch im LOG von ioBroker, also Verbindung ist vorhanden.mysensors.0 2020-06-07 20:32:21.798 warn (11632) Wrong serial data: 735876127 mysensors.0 2020-06-07 20:32:20.981 warn (11632) Wrong serial data: 3305246814 mysensors.0 2020-06-07 20:16:10.654 warn (11632) Wrong serial data: 3216 mysensors.0 2020-06-07 20:16:08.181 warn (11632) Wrong serial data: 544 mysensors.0 2020-06-07 20:16:07.443 warn (11632) Wrong serial data: 2592
Kapiere absolut nicht wie ich den Sketch für mysensors ändern muss, dass die Werte in eine Variable abgespeichert werden.
Hier der Sketch
#include <IRremote.h> const int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup(){ Serial.begin(115200); irrecv.enableIRIn(); } void loop(){ if (irrecv.decode(&results)){ if ( results.value != 4294967295){ Serial.println(results.value, DEC); } irrecv.resume(); } }
Möchte damit auslesen wenn eine Taste einer IR Fernbedienung betätigt wird um eine entsprechende Aktion zu starten.
Hilfe oder ein verständliches Beispiel Sketch wären super. WIe gesagt verstehe das leider aktuell noch nicht wie der Sketch aussehen muss.Danke im vorab
Ein Klaus -
Es funktioniert ohne Probleme
Es gibt wohl "Wrong serial data" Meldungen,diese können aber über das entfernen der Serial.print Anweisung im Sketch entfernt werden. Nutze sie aktuell nur um nachzuvollziehen welchen Code er empfangen hat.
Kann jetzt mit der Fernbedienung z.B. das Licht schalten.
Funktioniert mit einem Arduino Uno über USB + einen IR Receiver an Pin 11.Hier der Sketch
// Enable debug prints to serial monitor #define MY_DEBUG // Enable serial gateway #define MY_GATEWAY_SERIAL #include <MySensors.h> #include <IRremote.h> const int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; MyMessage msgIrReceive(RECV_PIN, V_IR_RECEIVE); void setup(){ irrecv.enableIRIn(); } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("IR Empfang", "1.0"); // Register all sensors to gateway (they will be created as child devices) present(RECV_PIN, S_IR); } void loop() { if (irrecv.decode(&results)){ //Taste dauerhaft drücken abfangen if ( results.value != 4294967295){ Serial.println(results.value, DEC); send(msgIrReceive.set(results.value)); } delay(200); irrecv.resume(); } }
Vielleicht bekomme ich es noch schöner hin, aber wie gesagt erstmal geht es.
Tipp: Wenn man die Fernbedienung nicht genau drauf hält hat er einen anderen Code.
Diesen habe ich ebenfalls genutzt. So kann ich schalten und walten auch wenn ich die FB nur ungefähr in die Richtung halte.Hier ein Beispiel Blockly
-
Noch ein kleiner Tipp
Die Empfangsleistung kann man deutlich verbessern indem man zwei IR-Receiver parallel schaltet (bei mir beide Eingänge auf Pin11)
Hier noch ein Bild von den IR-Receivern (KY-022)