Hilfe bei Sketch für IR Signal Übersetzer

Hallo Forum,

mit einem Arduino Nano möchte ich eine Übersetzung eines FB IR Signals realisieren.
Also Empfang eines FB Codes und dann da Senden eines anderen FB Codes.

Hintergrund:
In meiner Wohnung werkelt eine Universale Fb von Logitech, eine HarmonyLink.
Das ist eine Universelle FB, die mittels APP über LAN an einen IRSender komandos von vielen FB`s
senden kann.
Wie das immer so ist, habe ich eine FB für einen DeckenVentilator, der in der Datenbank von Logitech nicht drin ist.
Also meine Idee; ein beliebiges Gerät aus der Datenbank in die Harmony eintragen, und der Arduino empfängt dann diese Signal ( zB rec.) und sendet daraufhin ein IR Signal im RAW Code des Ventilators.
RAW habe ich ausgelesen, Signal (rec) von FB A auch.

Bei meinen Versuchen war ich z.T erfolgreich, in sofern dass der Test mit einem Code empfangen , und den RAW Code senden klappt.

Nun möchte ich aber noch ein 2. Signal verarbeiten (zB Pause), um das zu benutzen einen anderen
RAW Code zu senden.

Da bekomme ich beim Kompilieren aber Fehlermeldungen, die ich nicht verstehe.
Zu meiner Ehrenrettung, ich bin von Hause aus Handwerker. Mit der Hardware und Löten habe ich überhaupt keine Probleme.
Die Programierung allerdings fällt mir mit 58 Jahren als Einsteiger schwer.

Darum hier die Bitte mal in meinen Sketch zu schauen und mir helfen die Fehler zu finden.

Danke für die Hilfe

/*
Umsetzung von IR Signalen.
Ein IR Signsl von Fernb A empangen und anderes
IR Signal von Fernb B senden.
FB B ist RAW Code
*/

#include <IRremote.h>
#include <IRremoteInt.h>



#define irPin 11
IRrecv irrecv(irPin);     // IR Empf an Pin 11
decode_results results;


void setup() {
   Serial.begin(9600);
   irrecv.enableIRIn();   //Sendediode ist mit Pin 5 verbunden  
   
}

void loop() {
   if (irrecv.decode(&results)) {

  switch (results.value) {
         case 0xff38c7: //Venti ofen 2  Signal empfang von FB A
            Serial.println("Venti Ofen 2");   // Kontrolle  Monitor
            IRsend irsend;       

     int khz = 38; // 38kHz
     unsigned int ofen2[] = {600, 550, 600, 600, 550, 1450, 600, 1400, 650, 1400, 600, 1450, 600, 1400, 650, 550, 600, 550, 600, 1450, 600, 550, 600, 600, 550, 4350, 600, 550, 600, 600, 550, 1450, 600, 1450, 600, 1400, 650, 1400, 600, 1450, 600, 550, 600, 600, 550, 1450, 600, 550, 600, 600, 600, 4300, 600, 550, 600, 600, 600, 1400, 600, 1400, 650, 1400, 600, 1450, 600, 1450, 600, 550, 600, 600, 550, 1450, 600, 550, 600, 600, 600, 4400, 650, 550, 600, 550, 600, 1450, 600, 1450, 550, 1450, 600, 1400, 650, 1450, 550, 600, 600, 550, 600, 1450, 600, 550 }; //AnalysIR Batch Export (IRremote) - RAW

  irsend.sendRaw(ofen2, sizeof(ofen2) / sizeof(ofen2[0]), khz);   // Sende RAW von FB B
              
           
       break;         


         case 0xffb847: //Venti ofen aus  Signal empfang von BF A
            Serial.println("Venti Ofen aus");
      IRsend irsend;       

   unsigned int ofen0[] = {650, 500, 650, 550, 600, 1400, 650, 1400, 650, 1400, 600, 1450, 600, 1450, 600, 550, 600, 1450, 600,1400, 650, 550, 600, 550, 600, 4350, 600, 600, 600, 500, 650, 1400, 650, 1400, 600, 1450, 600, 1450, 600, 1400, 650, 550, 600, 1450, 600, 1400 650, 550, 600, 550, 600, 4350, 600, 550, 650, 500, 650, 1400, 600, 1450, 600, 1450, 600, 1400, 650, 1400, 650, 550, 600, 1400, 650, 1400, 650, 550, 600, 550, 600, 4450, 650, 550, 600, 550, 600, 1400, 650, 1400, 650, 1400, 600, 1450, 600, 1450, 600, 550, 600, 1450, 600, 1450, 600, 550 };
 
  irsend.sendRaw(ofen0, sizeof(ofen0) / sizeof(ofen0[0]), khz); //Sende RAW von FB B
              
            break;
         }

   irrecv.resume();
   }
}

Petje:
... Die Programierung allerdings fällt mir ... schwer. ...

Nimm Dir Zeit.

Deinen Code habe ich nicht gelesen, kann dazu also nur etwas Allgemeines sagen: Vermeide Zeilen, die länger als 80 Zeichen sind. Das ist lesefreundlicher und wenn Du Deinen Code hier zeigst, muss man nicht horizontal scrollen.

Gruß

Gregor

Stimmt, sah beim Eingeben anders aus.
Also nochmal:

/*
Umsetzung von IR Signalen.
Ein IR Signsl von Fernb A empangen und anderes
IR Signal von Fernb B senden.
FB B ist RAW Code
*/

#include <IRremote.h>
#include <IRremoteInt.h>



#define irPin 11
IRrecv irrecv(irPin);     // IR Empf an Pin 11
decode_results results;


void setup() {
   Serial.begin(9600);
   irrecv.enableIRIn();   //Sendediode ist mit Pin 5 verbunden  
   
}

void loop() {
   if (irrecv.decode(&results)) {

  switch (results.value) {
         case 0xff38c7: //Venti ofen 2  Signal empfang von FB A
            Serial.println("Venti Ofen 2");   // Kontrolle  Monitor
            IRsend irsend;       

     int khz = 38; // 38kHz
     unsigned int ofen2[] = {600, 550, 600, 600, 550, 1450, 600, 1400,
	 650, 1400, 600, 1450, 600, 1400, 650, 550, 600, 550, 600, 1450, 
	 600, 550, 600, 600, 550, 4350, 600, 550, 600, 600, 550, 1450, 600, 
	 1450, 600, 1400, 650, 1400, 600, 1450, 600, 550, 600, 600, 550,
	 1450, 600, 550, 600, 600, 600, 4300, 600, 550, 600, 600, 600, 1400,
	 600, 1400, 650, 1400, 600, 1450, 600, 1450, 600, 550, 600, 600, 550, 
	 1450, 600, 550, 600, 600, 600, 4400, 650, 550, 600, 550, 600, 1450,
	 600, 1450, 550, 1450, 600, 1400, 650, 1450, 550, 600, 600, 550, 600,
	 1450, 600, 550 }; //AnalysIR Batch Export (IRremote) - RAW

  irsend.sendRaw(ofen2, sizeof(ofen2) / sizeof(ofen2[0]), khz);   // Sende RAW von FB B
              
           
       break;         


         case 0xffb847: //Venti ofen aus  Signal empfang von BF A
            Serial.println("Venti Ofen aus");
      IRsend irsend;       

   unsigned int ofen0[] = {650, 500, 650, 550, 600, 1400, 650, 1400, 650,
   1400, 600, 1450, 600, 1450,600, 550, 600, 1450, 600,1400, 650, 550, 600,
   550, 600, 4350, 600, 600, 600, 500, 650, 1400, 650,1400, 600, 1450, 600,
   1450, 600, 1400, 650, 550, 600, 1450, 600, 1400 650, 550, 600, 550, 600,
   4350, 600, 550, 650, 500, 650, 1400, 600, 1450, 600, 1450, 600, 1400, 650,
   1400, 650, 550, 600, 1400, 650, 1400, 650, 550, 600, 550, 600, 4450, 650,
   550, 600, 550, 600, 1400, 650, 1400, 650, 1400, 600, 1450, 600, 1450, 600,
   550, 600, 1450, 600, 1450, 600, 550 };
 
  irsend.sendRaw(ofen0, sizeof(ofen0) / sizeof(ofen0[0]), khz); //Sende RAW von FB B
              
            break;
         }

   irrecv.resume();
   }
}

Petje:
Also nochmal: ...

Supi :slight_smile:

Jetzt habe ich Deinen Code zwar gelesen, aber keinen Fehler entdeckt. Ich kenne mich allerdings nicht mit den von Dir verwendeten Bibliotheken aus.

Wie lautet denn die Fehlermeldung, die Du bekommst?

Gruß

Gregor

Nachtrag
Vielleicht habe ich doch noch etwas entdeckt, das nicht stimmt: Im ersten switch-Teil definierst Du die Variable khz. Im zweiten switch-Teil ist diese Variable nicht definiert. Definiere diese Variable global (außerhalb von loop() und setup()) - dann ist sie von überall aus „sichtbar“.

OK, int 38kHz verlegt.

Wenn ich nur verstehen würde was er mir sagen will???

Fehlermeldungen:

Arduino: 1.6.13 (Windows 7), Board: "Arduino Nano, ATmega328"

WARNUNG: Kategorie 'Device Control, Signal Input/Output' in der Bibliothek rc-switch ist ungültig und wird auf 'Uncategorized' festgelegt
irinirout2:17: error: 'IRsend' does not name a type

IRsend irsend;

^

C:\Users--\Documents\Arduino\irinirout2\irinirout2.ino: In function 'void loop()':

irinirout2:35: error: 'irsend' was not declared in this scope

irsend.sendRaw(ofen2, sizeof(ofen2) / sizeof(ofen2[0]), khz); // Sende RAW von FB B

^

irinirout2:33: error: crosses initialization of 'unsigned int ofen2 [100]'

unsigned int ofen2 = {600, 550, 600, 600, 550, 1450, 600, 1400, 650, 1400, 600, 1450, 600, 1400, 650, 550, 600, 550, 600, 1450, 600, 550, 600, 600, 550, 4350, 600, 550, 600, 600, 550, 1450, 600, 1450, 600, 1400, 650, 1400, 600, 1450, 600, 550, 600, 600, 550, 1450, 600, 550, 600, 600, 600, 4300, 600, 550, 600,600, 600, 1400, 600, 1400, 650, 1400, 600, 1450, 600, 1450, 600, 550, 600, 600, 550, 1450, 600, 550, 600, 600, 600, 4400, 650, 550, 600, 550, 600, 1450, 600, 1450, 550, 1450, 600, 1400, 650, 1450, 550, 600, 600, 550, 600, 1450, 600, 550 }; //AnalysIR Batch Export (IRremote) - RAW

^

irinirout2:46: error: expected '}' before numeric constant

unsigned int ofen0 = {650, 500, 650, 550, 600, 1400, 650, 1400, 650, 1400, 600, 1450, 600, 1450, 600, 550, 600, 1450, 600,1400, 650, 550, 600, 550, 600, 4350, 600, 600, 600, 500, 650, 1400, 650, 1400, 600, 1450, 600, 1450, 600, 1400, 650, 550, 600, 1450, 600, 1400 650, 550, 600, 550, 600, 4350, 600, 550, 650, 500, 650, 1400, 600, 1450, 600, 1450, 600, 1400, 650, 1400, 650, 550, 600, 1400, 650, 1400, 650, 550, 600, 550, 600, 4450, 650, 550, 600, 550, 600, 1400, 650, 1400, 650, 1400, 600, 1450, 600, 1450, 600, 550, 600, 1450, 600, 1450, 600, 550 };

^

irinirout2:46: error: expected ',' or ';' before numeric constant

irinirout2:48: error: 'irsend' was not declared in this scope

irsend.sendRaw(ofen0, sizeof(ofen0) / sizeof(ofen0[0]), khz); //Sende RAW von FB B

^

irinirout2:48: error: 'ofen0' was not declared in this scope

irsend.sendRaw(ofen0, sizeof(ofen0) / sizeof(ofen0[0]), khz); //Sende RAW von FB B

^

irinirout2:54: error: expected '}' at end of input

{

^

irinirout2:54: error: expected '}' at end of input

exit status 1
'IRsend' does not name a type

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Deklariere solche große Arrays wenn möglich nicht lokal und erst recht nicht in einem switch/case. Ein case Statement kreiert keinen Scope. Daher kannst du darin keine Variablen deklarieren. Mit einem { } Code Block würde es gehen. Besser ist aber du machst sie global - oder wenigstens außerhalb des switch Statements.

Das gleiche gilt für irsend

Tipp: Google nach den Fehlermeldungen ohne die spezifischen Sachen für dein Programm. Zu “C++ crosses initialization” gibt es massig Treffer

Petje:
Wenn ich nur verstehen würde was er mir sagen will???

Hmpf. Mit diesen Meldungen kann auch ich nichts Rechtes anfangen. Die sehen mir zu Bibliotheken-spezifisch aus.

Sorry, aber hier muss ich aussteigen.

Gruß

Gregor

Mit diesen Meldungen kann auch ich nichts Rechtes anfangen. Die sehen mir zu Bibliotheken-spezifisch aus.

Nein. Ganz normale C/C++ Fehler. In einem case Statement kann man ohne einen extra Code Block keine Variablen deklarieren.

Und wie gesagt, solche Fehler kann man Googeln:
https://www.google.com/#safe=off&q=C%2B%2B+"crosses+initialization"
Der Rest sind Folge-Fehler. Bis auf die Sachen mit den Klammern vielleicht.

Serenifly:
Nein. Ganz normale C/C++ Fehler.

Die Fehlermeldung

irinirout2:17: error: 'IRsend' does not name a type

sieht IMO schon ziemlich speziell aus. „irinirout2“ ist zumindest nichts, was ich von C/C++ her kenne.

Aber vielleicht bin ich auch nur zu müde. Die Primatenparty war wieder ein bisschen anstrengend heute :slight_smile:

Gruß + gute N8!

Gregor

Was da vorne steht ist völlig egal. Das ist sowie es aussieht der Name seiner .ino Datei

Das wird auch hiervon kommen:

case 0xff38c7:
   ....
   IRsend irsend;

Danke für die Anregungen,
habs hinbekommen, mit einer kleinen Ausnahme:

Der Nano empfängt ein IR Signal und sendet daraufhin einen Raw code. Gerät reagiert
wie gewünscht.
ABER nur ein mal. Danach kommt nix mehr. Nach Reset funktioniert er wieder nur ein mal.
Offensichtlich habe ich einen Fehler in der Schleife.

Da mir aber der Kopf qualmt und ich vor lauter Bäumen den Wald nicht mehr sehe,
bitte ich nochmal um Hilfe. Wo steckt da der Haken? Wieso bleibt der Sketch hängen?

[code]
/*
Umsetzung von IR Signalen.
Ein IR Signsl von Fernb A empangen und anderes
IR Signal von Fernb B senden.
FB B ist RAW Code
*/

#include <IRremote.h>




#define irPin 11
IRrecv irrecv(irPin);     // IR Empf an Pin 11
decode_results results;
  int khz = 38; // 38kHz
  IRsend irsend;   
unsigned int  rawO0[100] = {600,550, 600,550, 600,1450, 600,1450, 600,1400, 600,1450, 600,1400, 650,550, 600,1400, 650,1400, 600,600, 600,550, 600,4300, 600,600, 600,550, 600,1400, 600,1450, 600,1450, 600,1450, 550,1450, 600,600, 550,1450, 600,1450, 600,550, 600,550, 600,4300, 650,550, 600,550, 600,1400, 650,1450, 550,1450, 600,1450, 600,1450, 600,550, 600,1400, 650,1400, 600,600, 550,600, 600,4400, 650,550, 600,550, 600,1400, 650,1450, 550,1450, 600,1450, 600,1450, 550,600, 600,1400, 600,1450, 600,600 };  // UNKNOWN E1E9E7C5
unsigned int  rawO2[100] = {600,550, 600,550, 600,1450, 600,1400, 600,1450, 600,1450, 600,1400, 650,550, 600,550, 600,1450, 600,550, 600,550, 600,4350, 600,550, 600,550, 600,1450, 600,1450, 550,1450, 600,1450, 600,1450, 600,550, 600,550, 600,1450, 600,550, 600,550, 600,4350, 600,550, 600,550, 600,1450, 600,1450, 550,1450, 600,1450, 600,1450, 600,550, 600,550, 600,1450, 600,550, 600,550, 600,4450, 600,550, 650,550, 600,1400, 650,1400, 600,1450, 600,1450, 550,1450, 600,600, 550,600, 600,1450, 600,550 };  // UNKNOWN 82670BA5
unsigned int  rawT0[23] = {1250,400, 1300,400, 400,1250, 1250,400, 1300,400, 400,1250, 450,1200, 450,1200, 450,1200, 500,1200, 450,1200, 1300};  // UNKNOWN A32AB931
unsigned int  rawT2[23] = {1250,450, 1250,400, 400,1250, 1250,450, 1250,400, 400,1250, 450,1200, 450,1200, 1300,400, 450,1200, 450,1200, 450};  // UNKNOWN E0984BB6
  

void setup() {
   Serial.begin(9600);
   irrecv.enableIRIn();  
   //Sendediode ist mit Pin 3 verbunden  
   
}

void loop() {
   if (irrecv.decode(&results))   {

  switch (results.value) {
         case 0xff38c7: //Venti ofen 2  Signal empfang von FB A
         Serial.println("Venti Ofen 2");   // Kontrolle  Monitor
         irsend.sendRaw(rawO0,100,38);
 break;               
         case 0xffb847: //Venti ofen aus  Signal empfang von BF A
            Serial.println("Venti Ofen aus");
            irsend.sendRaw(rawO2,100,38);
 break;               
        case 0xff926d:
            Serial.println("Venti Tuer 2 ");
            irsend.sendRaw(rawT0,23,38);
break; 
        case 0xff5aa5:   
            Serial.println("Venti Tuer aus");  
            irsend.sendRaw(rawT2,23,38);
break;             
         }

   irrecv.resume();
  
   }
    }

[/code]

Serenifly:
Was da vorne steht ist völlig egal. Das ist sowie es aussieht der Name seiner .ino Datei

Stimmt. Um daran zu denken war ich wohl wirklich ein bisschen zu müde. Nunja ... der Samstagabend fordert eben seinen Tribut, nech.

Gruß

Gregor

Petje:
… bitte ich nochmal um Hilfe. Wo steckt da der Haken? Wieso bleibt der Sketch hängen?

Klasse finde ich, dass das switch()-Konstrukt jetzt bei Bedarf vollständig zu sehen ist. Ich habe mir mal erlaubt, Deinen Code noch weiter so zu formatieren, dass ich es „hübsch“ finde. Das switch()-Ding habe ich um einen „default“-Abschnitt ergänzt. Manche meinen zwar, dass man das weglassen kann, wenn es nicht benötigt wird, ich finde, dass es auf jeden Fall dort hingehört, weil man sonst denken kann, es sei vergessen worden.

/*
Umsetzung von IR Signalen.
Ein IR Signsl von Fernb A empangen und anderes
IR Signal von Fernb B senden.
FB B ist RAW Code
*/

#include <IRremote.h>

#define irPin 11
IRrecv irrecv(irPin); // IR Empf an Pin 11

decode_results results;
int khz = 38; // 38kHz
IRsend irsend;   
unsigned int  rawO0[100] = {600, 550, 600, 550, 600, 1450, 600, 1450, 600, 
                           1400, 600, 1450, 600, 1400, 650, 550, 600, 1400,
                           650, 1400, 600, 600, 600, 550, 600, 4300, 600,
                           600, 600, 550, 600, 1400, 600, 1450, 600, 1450,
                           600, 1450, 550, 1450, 600, 600, 550, 1450, 600,
                           1450, 600, 550, 600, 550, 600, 4300, 650, 550,
                           600, 550, 600, 1400, 650, 1450, 550, 1450, 600,
                           1450, 600, 1450, 600, 550, 600, 1400, 650, 1400,
                           600, 600, 550, 600, 600, 4400, 650, 550, 600,
                           550, 600, 1400, 650, 1450, 550, 1450, 600, 1450,
                           600, 1450, 550, 600, 600, 1400, 600, 1450, 600,
                           600 };  // UNKNOWN E1E9E7C5
unsigned int  rawO2[100] = {600, 550, 600, 550, 600, 1450, 600, 1400, 600,
                           1450, 600, 1450, 600, 1400, 650, 550, 600, 550,
                           600, 1450, 600, 550, 600, 550, 600, 4350, 600,
                           550, 600, 550, 600, 1450, 600, 1450, 550, 1450,
                           600, 1450, 600, 1450, 600, 550, 600, 550, 600,
                           1450, 600, 550, 600, 550, 600, 4350, 600, 550,
                           600, 550, 600, 1450, 600, 1450, 550, 1450, 600,
                           1450, 600, 1450, 600, 550, 600, 550, 600, 1450,
                           600, 550, 600, 550, 600, 4450, 600, 550, 650,
                           550, 600, 1400, 650, 1400, 600, 1450, 600, 1450,
                           550, 1450, 600, 600, 550, 600, 600, 1450, 600,
                           550 };  // UNKNOWN 82670BA5
unsigned int  rawT0[23] = {1250, 400, 1300, 400, 400, 1250, 1250, 400, 1300,
                           400, 400, 1250, 450, 1200, 450, 1200, 450, 1200,
                           500,1200, 450,1200, 1300};  // UNKNOWN A32AB931
unsigned int  rawT2[23] = {1250, 450, 1250, 400, 400, 1250, 1250, 450, 1250,
                           400, 400, 1250, 450, 1200, 450, 1200, 1300, 400,
                           450, 1200, 450, 1200, 450};  // UNKNOWN E0984BB6

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); 
  //Sendediode ist mit Pin 3 verbunden 
}

void loop()
{
 if (irrecv.decode(&results))
 {
   switch (results.value)
   {
     case 0xff38c7: //Venti ofen 2  Signal empfang von FB A
                    Serial.println("Venti Ofen 2"); // Kontrolle
                    irsend.sendRaw(rawO0,100,38);
                    break;               
     case 0xffb847: //Venti ofen aus  Signal empfang von BF A
                    Serial.println("Venti Ofen aus");
                    irsend.sendRaw(rawO2,100,38);
                    break;               
     case 0xff926d: // Hier koennte Ihre Werbung stehen
                    Serial.println("Venti Tuer 2 ");
                    irsend.sendRaw(rawT0,23,38);
                    break;
     case 0xff5aa5: // Kommentar  
                    Serial.println("Venti Tuer aus"); 
                    irsend.sendRaw(rawT2,23,38);
                    break;
     default:       break;
   }
   irrecv.resume(); // Was macht dieser Befehl?
 }
}

Was macht der letzte Befehl? Kann es sein, dass das Programm hier hängen bleibt?

Gruß

Gregor

Uh. Soeben habe ich noch etwas entdeckt: Du definierst am Anfang zwar die Variable khz, benutzt diese aber nicht. In irsend.sendRaw() steht jedesmal „38“.

Hallo Gregor,

der Befehl am Ende stoppt die IR Sendung. Ohne den wird der erste empfangenen Befehl ununterbrochen gesendet.

Gruß
Petje

Besser gesagt, IRrecv wird zurückgesetzt für den Empfang eines neuen Signals.

Petje:
… der Befehl am Ende stoppt die IR Sendung. …

Dann ist ja immerhin schon geklärt, dass es nicht an Deinem Sketch liegt. Bist Du sicher, dass das Anlegen des irrecv-Objektes am Anfang des Sketches korrekt ist? Fehlen evtl. Parameter oder unterscheiden sich Vorgabewerte von dem, was Du gebastelt bzw. programmiert hast? Oder fehlt evtl. noch ein Parameter für das Zurücksetzen des Empfängers?

Wie gesagt, ich kenne die Bibliothek nicht.

Gruß

Gregor

Wir haben dieses Problem kürzlich hier im Forum schon einmal bearbeitet, leider finde ich den Beitrag aktuell nicht.

Du solltest mal im Forum danach googeln, sorry dass ich nicht direkt weiter helfen kann, aber ich bin sicher dass durch entsprechende Änderungen im Sketch der Fehler zu beseitigen ist.

Hallo,
das Problem verfolgt mich schon im Schlaf :slight_smile:

Zum Testen wo ich falsch liege, habe ich mal einen ganz kleinen Sketch geschrieben.

Also Empfangen… klappt
Erkennen…klappt
Raw Senden…klappt
und dann sendet der immer weiter, obwohl ich mit irrecv resume den Empfang wieder starte.
Warum sendet der immer weiter, obwohl kein Signal empfangen wird???

Hier mal der Sketch:

/*
Umsetzung von IR Signalen.
Ein IR Signsl von Fernb A empangen und anderes
IR Signal von Fernb B senden.
FB B ist RAW Code
*/

#include <IRremote.h>
#define irPin 11
IRrecv irrecv(irPin);     // IR Empf an Pin 11  Sendediode ist mit Pin 3 verbunden 
decode_results results;
 
  IRsend irsend;   
unsigned int  rawO0[100] = {600,550, 600,550, 600,1450, 600,1450, 600,1400, 600,1450, 600,1400, 650,550, 600,1400, 650,1400, 600,600, 600,550, 600,4300, 600,600, 600,550, 600,1400, 600,1450, 600,1450, 600,1450, 550,1450, 600,600, 550,1450, 600,1450, 600,550, 600,550, 600,4300, 650,550, 600,550, 600,1400, 650,1450, 550,1450, 600,1450, 600,1450, 600,550, 600,1400, 650,1400, 600,600, 550,600, 600,4400, 650,550, 600,550, 600,1400, 650,1450, 550,1450, 600,1450, 600,1450, 550,600, 600,1400, 600,1450, 600,600 };  // UNKNOWN E1E9E7C5
unsigned int  rawO2[100] = {600,550, 600,550, 600,1450, 600,1400, 600,1450, 600,1450, 600,1400, 650,550, 600,550, 600,1450, 600,550, 600,550, 600,4350, 600,550, 600,550, 600,1450, 600,1450, 550,1450, 600,1450, 600,1450, 600,550, 600,550, 600,1450, 600,550, 600,550, 600,4350, 600,550, 600,550, 600,1450, 600,1450, 550,1450, 600,1450, 600,1450, 600,550, 600,550, 600,1450, 600,550, 600,550, 600,4450, 600,550, 650,550, 600,1400, 650,1400, 600,1450, 600,1450, 550,1450, 600,600, 550,600, 600,1450, 600,550 };  // UNKNOWN 82670BA5
unsigned int  rawT0[23] = {1250,400, 1300,400, 400,1250, 1250,400, 1300,400, 400,1250, 450,1200, 450,1200, 450,1200, 500,1200, 450,1200, 1300};  // UNKNOWN A32AB931
unsigned int  rawT2[23] = {1250,450, 1250,400, 400,1250, 1250,450, 1250,400, 400,1250, 450,1200, 450,1200, 1300,400, 450,1200, 450,1200, 450};  // UNKNOWN E0984BB6
    // mehrere RAW Codes zum testen

void setup() 
{
     irrecv.enableIRIn();    // Empfänger Ein
  }

void loop() {
 
      (irrecv.decode(&results));   // Empfangen und an &results übergeben
      
      if (results.value==0xff38c7) {   // empfangen?
        
      irsend.sendRaw(rawO2,100,38);    // Raw senden
    
      irrecv.resume();{                // Empfänger bereit für nächsten Code
     
    
   }       
   }  
   }

Petje:
... das Problem verfolgt mich schon im Schlaf :slight_smile: ...

Tröste Dich, das ist besser als Alpträume :slight_smile:

Petje:
... Hier mal der Sketch: ...

Ich habe Deinen Sketch mal auf das Wesentliche reduziert und aufgehübscht.:

void setup() 
{
  irrecv.enableIRIn();    // Empfänger Ein
}

void loop()
{
  irrecv.decode(&results);   // Empfangen und an &results übergeben
      
  if (results.value==0xff38c7)    // empfangen?
  {
    irsend.sendRaw(rawO2,100,38);    // Raw senden
    irrecv.resume();     // Empfänger bereit für nächsten Code
  }  
}

So erkennt man IMO die Schachtelung besser. Der Raw-Code wird immer wieder geschickt, weil „&results“ anscheinend nicht zurückgesetzt wird. Schreibe mal

results.value=0;

in das if()-Konstrukt. Dann hast Du das Problem wahrscheinlich gelöst (allerdings nicht an der Wurzel).

Gruß

Gregor

Danke für das Aufhübschen.Da fehlt mir manchmal der Nerv.

Das results.value=0; bringt auch nix.
ich glaube es geht nach dem Senden nicht weiter.
Da ist der Haken wohl in der irremote.h zu suchen.
Das ist aber ein Mächtiges Stück. 99,9 % verstehe ich davon nicht.
Aber die Lösung ist da wohl zu finden… Muss ich mich noch mal Reinknien.
Danke für Deine Hilfe.
Gruß
Petje