Go Down

Topic: [Q] Senden von Infrarotsignalen (Read 982 times) previous topic - next topic

Holzelektrode

Hallo an alle!

Ich bin noch recht neu in Sachen Mikorcontroller etc. und habe ein Problem mit dem Klonen der Signale einer IR-Fernbedienung. Genauer gesagt geht es um drei Fernbedienungen. Einige Funktionen dieser sollen in einer einzigen integriert werden.

Hierzu möchte ich einen Arduino Mega 2560 sowie die IRRemote.h von Kenn Shirriff verwenden (sofern es keine bessere option gibt). Sämtliche relevante Hardware sowie elektronische Grundkenntnisse sind vorhanden, ebenso die Möglichkeiten und Kenntnis zum Löten, Ätzen und Fräsen. Ferner verwende ich die Arduino IDE 1.6.2




Das auslesen, so meine ich, klappt bisher ohne Probleme, ich habe dazu den originalen Beispielcode ein wenig angepasst da ich mit der Originalversion nur Zeichensalat auf dem Serial Monitor bekam (z.B. trotz identischer Tastendrücke unterschiedliche Ausgabewerte, lag wohl iwie am Timing).

Hier der von mir verwendete Code:





Code: [Select]

/*
 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN); // Empfänger an Pin 11

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Empfänger starten
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(""); //  0o0-Strings zur besseren Darstellung im Serial Monitor
    Serial.println("");
    Serial.println("0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0");
    Serial.println("0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0");
    Serial.println("0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0");
    Serial.println("0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0");
    Serial.println("");
    Serial.println("Hexadezimal:"); //Werteausgabe
    Serial.println(results.value, HEX);
    Serial.println("Dezimal:");
    Serial.println(results.value, DEC);
    Serial.println("Oktal:");
    Serial.println(results.value, OCT);
    Serial.println("Binaer:");
    Serial.println(results.value, BIN);
    Serial.println("");
    Serial.println("0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0");
    Serial.println("0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0");
    Serial.println("0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0");
    Serial.println("0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0o0");
    Serial.println("");
    Serial.println("");
    irrecv.resume(); // Auf nächste Eingabe warten
  }
}






Die damit erhaltenen Werte habe ich derweil in einer Tabelle festgehalten, das ganze sieht dann so aus:




Wie handhabe ich denn jetzt die Ausgabe dieser Signale mittels einer IR-LED? Ich meine, der hardwareseitige Aspekt wirft keinerlei Fragen auf, aber  wie kann ich diese Codes jetzt in das Beispielsketch sendir.ino einbauen? Leider habe ich keinen der in der Headerdatei gelisteten Hersteller wie Sony oder NEC... Kann ich die Werte nicht einfach irgendwie als Raw Data an einen gewissen Pin übergeben oder so?




Der Vollständigkeit halber hier noch der Code des Sende-Beispiels:

Code: [Select]

#include <IRremote.h>

IRsend irsend;

void setup()
{
  Serial.begin(9600);
}

void loop() {
  if (Serial.read() != -1) {
    for (int i = 0; i < 3; i++) {
      irsend.sendSony(40409867, 12); // Sony TV power code
      delay(40);
    }
  }
}





Ich bedanke mich fürs Lesen und jegliche Ratschläge!

P.S.: Gibt es hier kein Spoilertag oder funktioniert das bloß in der Preview nicht?


Holzelektrode

Hm, hat keiner ne Idee? Mir wär eigentlich schon vollkommen geholfen wenn mir wer nen Tip geben könnte wie ich die ausgelesenen Werte in ne Abfolge von pin high, pin low und delay umrechnen kann, oder spricht da was gegen?

erni-berni

Hallo,

bist du sicher, dass deine Fernbedienung keinen der bekannten Codes sendet (RC5, RC6, Sony, Philips, usw) ?
Wenn du wirklich raw data senden musst, schau dir diesen Post mal an

Gruß
Reinhard

Holzelektrode

Hallo,

bist du sicher, dass deine Fernbedienung keinen der bekannten Codes sendet (RC5, RC6, Sony, Philips, usw) ?
Ehrlich gesagt nein, es ist halt kein Gerät dieser Hersteller dabei. Im einzelnen geht es um einen Sat-Reciever der Marke Strong sowie jeweils einen DVD-Player und einen Röhrenfernseher von LG. Wie bekomme ich denn raus welche Codes gesendet werden? Alles was ich habe auslesen können steht in dem Screenshot im Startpost.

Wenn du wirklich raw data senden musst
Ob ich das muss weiß ich nicht, aber mich irritiert halt zum Beispiel dass in sämtlichen Beispielen die ich mir dazu bisher angesehen habe beim Auslesen der originalen FB die gewonnenen Signale so lang/umfangreich sind (Im Beispiel von dir z.B.
"0xA 0x17 0xA 0x7 0xA 0x17 0xA 0x7 0xA 0x6 0xB 0x17 0xA 0x17 0xA 0x6 0xB 0x17 0xA 0x17   
0xB 0x6 0xA 0x6 0xB 0x17 0xA 0x6 0xB 0x6 0xA 0x17 0xB 0x6 0xA 0x6 0xB 0x6 0xA 0x7 0xA     
0x6 0xB 0x6 0xA 0x6 0xB 0x6 0xA 0x7 0xA 0x6 0xB 0x6 0xA 0x7 0xA 0x6 0xB 0x6 0xA 0x6 0xB   
0x6 0xA 0x7 0xA 0x6 0xB 0x6 0xA 0x6 0xB 0x17 0xA 0x6 0xB 0x6 0xA "

wohingegen ich beim auslesen meiner FB nur kurze 8 Byte große Hexwerte bekomme (z.B. 404050AF für den Powerbutton der Sat-FB). Irgendwie komme ich gerade absolut nicht voran. Erschwerend kommt auch dazu dass ich mit Programmierung in C/C++-Dialekten wenig bis keine Erfahrung habe, zum letzten Mal habe ich mich vor 15 Jahren im Rahmen einer schulischen Ausbildung damit befasst und den "Neueinstieg" erst kürzlich dank Arduino gewagt.

Für deine Antwort bedanke ich mich vielmals!



Go Up