IR Fernbedienung auslesen

Ich möchte über die Arduino Wolke mit meinem RP2040 den heimischen Staubsaugroboter ansteuern.
Deshalb möchte ich die Fernbedienung auslesen.

Klappt aber nicht. :shushing_face:

Das Terminal zeigt nur Blödsinn an: -1, -1, 65300, -1, -1.......

Habt ihr einen Tip für mich? :pray:

Ich verwende etwas angepasst den Code von: https://draeger-it.blog/arduino-lektion20-irfernbedienung/?utm_content=cmp-true

#include <IRremote.h>
int irPin = 14; //Pin am Arduino Nano für den IR Receiver
//int ledPin = 5; //Pin am Arduino Nano für die LED als Signalbestätigung
//int led1Pin = 4; //Pin am Arduino Nano für LED 1
//int led2Pin = 3; //Pin am Arduino Nano für LED 2
boolean led1Status = false;
boolean led2Status = false;
IRrecv irrecv(irPin); //Objekt initialisieren für die IR Übertragung
decode_results results;
void setup() {
  //pinMode(ledPin, OUTPUT);  //Den LED Pin als Ausgang deklarieren.
  pinMode(irPin, INPUT);  //Den IR Pin als Eingang deklarieren.
  irrecv.enableIRIn(); //Den IR Pin aktivieren
  Serial.begin(9600); //Serielle kommunikation mit 9600 Baud beginnen.
}
 
void loop(){
   if (irrecv.decode(&results)) { //Wenn etwas gelesen wurde dann...
      //Ausgabe des Wertes auf die Serielle Schnittstelle.
      int value = results.value;
      switch (value){
        case 16724175 : //Taste 1
            led1Status = !led1Status; //umkehren des Status für die LED 1
            if(led1Status == true){
              //digitalWrite (led1Pin, HIGH); //LED anschalten
            } else {
              //digitalWrite (led1Pin, LOW); //LED ausschalten
            }
        break;
        case 16718055 : //Taste 2
            led2Status = !led2Status; //umkehren des Status für die LED 2
            if(led2Status == true){
              //digitalWrite (led2Pin, HIGH); //LED anschalten
            } else {
              //digitalWrite (led2Pin, LOW); //LED ausschalten
            }
        break;
      }
      Serial.println(value, DEC);
      //digitalWrite (ledPin, HIGH); //Status LED anschalten
      irrecv.resume(); // auf den nächsten Wert warten
      delay(250); // kurze Pause von 250ms damit die LED aufleuchten kann.
      //digitalWrite (ledPin, LOW); //Status LED ausschalten
 }
}

Kann es sein, dass die Fernbedienung verschlüsselt ist?
Funkfernbedienung für Kfz wie verschlüsseln? - Mikrocontroller.net.

Durchaus möglich, weiss ich aber nicht.

  1. Die Bibliothek bietet Beispiele zum Erkennen und Analysieren der Fernbedienung an, die solltest Du laufen lassen.
  2. Die Bibliothek bevorzugt Fernsehfernbedienungen. Bei Lüftern, Klimaanlagen und dergleichen benötigt man extra Optionen, damit die Bibliothek tut, was sie soll.
1 Like

Der Code ist auch Grütze und funktioniert mit der aktuellen Version von IRRemote nicht.

Das Gleiche hatte ich vor kurzem hier

Da war der gleiche Code in Tinkercad verwurstet (hat der TO inzwischen geändert) und der TO hat sich gewundert warum das nicht funktioniert.

Muss jetzt nicht genau das gleiche Problem, bzw. das einzige Problem bei Dir sein, aber wenn Du eine Version > 3.1 einsetzt, muss das grundsätzlich etwas anders gemacht werden.

Hast Du denn eine Ahnung welches Protokoll die Fernbedienung verwendet?

Fernbedienungen für Fernseher, CD/DVD , Satelitenempfänger usw senden einen Code pro Taste. Klimaanlagen senden Datenpackete.
Des weiteren gibt es die Empfänger für mehrere Modulationsfrequenzen. Fernsehr ecc haben eine modulationsfrequenz von 38kHz.

Grüße Uwe

Vielleicht hast Du damit etwas mehr Glück?

Nein, leider nicht.

Ja, das vermute ich auch.

Danke, das werde ich mal testen!:+1:

Dann hol Dir doch mal die aktuelle "SimpleReceiver Demo" von IR Remote und lies Dir das hier durch:

Handling unknown protocols

Nach ein paar Schwierigkeiten läuft jetzt IRMP auf meinem Uno und gibt mir bei IR-Tastendruck folgendes auf den ser. Monitor:

P=NEC A=0x5540 C=0x44

NEC wird der Protokolltyp sein, aber was ist A und C? Und wie sende ich diesen Befehl mit dem Uno?

Hab was gefunden, muss aber noch testen:

Ich hab das IRMP selbst noch nicht getestet, nur durch das MC.net gefunden.
Aber das in der SimpleSender.ino sieht doch ähnlich aus wie bei Dir:

irsnd_data.protocol = IRMP_NEC_PROTOCOL;
irsnd_data.address = 0x0707;
irsnd_data.command = 0xFB;

Ja, genau!

A ist die Adresse und C das Kommando.
Funktioniert jetzt. Also für Medion Staubsaugroboter E32 funktioniert das Protokoll von NEC!

Um übrigen wird der Pin für die Sende-LED im ser.Monitor angezeigt.

Noch ein Hinweis: Im IRMP Decoder muss man kein LCD anschliessen. Alle Werte werden auch im ser.Monitor angezeigt!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.