Probleme beim senden von IR Signalen

Moin,

Ich stehe gerade vor einem Problem und weiß nicht wo ich den Fehler noch suchen soll.

Infos zum Projekt:

  • TV und Kodi haben jeweils eine Fernbedienung welche jetzt durch eine alte PS3 FB ersetzt werden soll
  • der TV wird mit 3 Tasten bedient. An/Aus sowie Lauter und Leiser ( sonst wird keine Taste benötigt )
  • Die Codes für die originale FB und der PS3 FB habe ich ausgelesen und in einer Switch Case abfrage hinterlegt ( das funktioniert in einem anderen Projekt wo IR Signale zu RF Signalen gewandelt werden problemlos ).
  • Wenn einer dieser 3 Codes von der neuen Fernbedienung erkannt wurde sollten jetzt die passenden Codes der alten FB gesendet werden. Es wird auch was gesendet ( zu erkennen Via Handy Kamera ) nur leider nimmt der TV die Codes nicht an.

Die 32Khz sollten für NEC Codes passen ( hatte ich an andere Stelle gelesen )

Hat jemand von euch eine Idee?

#include <IRremote.h>

const int RECV_PIN = 6;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();
  irrecv.blink13(true);
}

void loop() {

  if (irrecv.decode(&results)) {
    Serial.print("Received IR code ");
    Serial.println(results.value);
    switch (results.value) {
     case 21516:
        irsend.sendNEC(0xFE50AF, 32);
        //irsend.sendRaw(16666799, 1, 32);
        delay(100);
        break;

     case 9228:
        irsend.sendNEC(0xFE7887, 32);
        //irsend.sendRaw(16676999, 1, 32);
        delay(100);
        break;
     
     case 25612:
        irsend.sendNEC(0xFEFA05, 32);
       //irsend.sendRaw(16710149, 1, 32);
        delay(100);
        break;
    }
    irrecv.enableIRIn();
    irrecv.resume();
  }
}

Hast du schon mal versucht, deine IR-Codes einzeln, also ohne vorher andere Code zu empfangen, diese zu senden.

Ich habe bisher das Problem gehabt, wenn man einen Code empfängt, direkt danach einen anderen zu senden.

Du solltest erst empfangen, den Wert speichern, diesen Vorgang komplett abschließen und danach den Sendevorgang starten.
So hat es bei mir dann immer funktioniert.

Hi Dieter,

Danke für deine Antwort.

Meintest du das ganze quasi so?

Falls ja, klappt es leider nicht.

NACHTRAG: Wenn ich → for (int i = 0; i < 50; i++) { irsend.sendNEC(0xFEFA05, 32);delay(40);}

in setup einfüge das er es beim Booten einmal ausführt kommen die codes korrekt am TV an.

#include <IRremote.h>

const int RECV_PIN = 6;
int i = 0;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  irrecv.blink13(true);
}

void loop() {

  if (irrecv.decode(&results)) {
    Serial.print("Received IR code ");
    Serial.println(results.value);
    Serial.print("Received IR bits ");
    Serial.println(results.bits);
    i = results.value;
    irrecv.resume();

    switch (i) {
     case 21516:
        irsend.sendNEC(0xFE50AF, 32);
        //irsend.sendRaw(16666799, 32, 32);;
        delay(100);
        break;

     case 9228:
        irsend.sendNEC(0xFE7887, 32);
        //irsend.sendRaw(16676999, 32, 32);
        delay(100);
        break;
     
     case 25612:
        irsend.sendNEC(0xFEFA05, 32);
        //irsend.sendRaw(16710149, 32, 32);
        delay(100);
        break;
    }
    irrecv.enableIRIn();
  }
}

Ja, so war es gemeint.

Du solltest aber zuvor die gesendeten Code auch austesten, ob diese empfangen und richtig ausgewertet werden.

Wenn das schon nicht funktioniert, liegt es an den Code, die du sendest.

Aktuell sieht es nach int-Code aus, sollte also reichen.
Nimm aber mal Long als Variable i.

Ok, den Nachtrag habe ich jetzt erst gelesen.
Damit benötigt er den Code mehrfach, oder evtl. stimmt die Trägerfrequenz nicht.

So funktioniert es jetzt:

Man muss des Signal wohl tatsächlich mehrfach schicken das der TV reagiert.

DANKE DIETER FÜR DEINE HILFE!

#include <IRremote.h>

const int RECV_PIN = 6;
int i = 0;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  irrecv.blink13(true);
}

void loop() {

  if (irrecv.decode(&results)) {
    Serial.print("Received IR code ");
    Serial.println(results.value);
    Serial.print("Received IR bits ");
    Serial.println(results.bits);
    i = results.value;
    irrecv.resume();

    switch (i) {
     case 21516:
       for (int i = 0; i < 25; i++) {
          irsend.sendNEC(0xFE50AF, 32);
          delay(10);
       }
       break;

     case 9228:
       for (int i = 0; i < 15; i++) {
          irsend.sendNEC(0xFE7887, 32);
          delay(10);
       }
        break;
     
     case 25612:
        for (int i = 0; i < 15; i++) {
          irsend.sendNEC(0xFEFA05, 32);
          delay(10);
       }
        break;
    }
    irrecv.enableIRIn();
  }
}

kwoth84:
So funktioniert es jetzt:

Man muss des Signal wohl tatsächlich mehrfach schicken das der TV reagiert.

DANKE DIETER FÜR DEINE HILFE!

Alles klar, gerne.
Und danke für deine Rückmeldung.