IR Fernbedienung Auslesen / Probleme

Thema IR-Fernbedienung auslesen:

Ich lese eine IR-Fernbedienung mit dem angehängten code aus. Es handelt sich um eine Fernbedienung für einen Ventilator mit nur 4 Tasten.

#include <Arduino.h>
 
//#define RECORD_GAP_MICROS 12000
#define DEBUG
#include <IRremote.h>
 
const int RECV_PIN = 2;
 
 
void setup(){
  Serial.begin(9600);
  Serial.println("IR Empfänger gestartet");
  IrReceiver.begin(RECV_PIN);
 
}
 
void loop(){
  if (IrReceiver.decode()){
        IrReceiver.printIRResultShort(&Serial);
        IrReceiver.resume();
  }
}

Als Ergebnis bekomme ich folgendes:

Ventilator

09:56:37.024 -> NEC: Data length=24 is not 68 or 4
09:56:37.070 -> Kaseikyo: Data length=24 is not 100
09:56:37.117 -> Denon: Data length=24 is not 32
09:56:37.162 -> RC5: first getBiphaselevel() is not MARK
09:56:37.162 -> RC6: Header mark or space length is wrong
09:56:37.209 -> LG: Data length=24 is not 60 or 4
09:56:37.256 -> JVC: Data length=24 is not 34 or 36
09:56:37.302 -> Samsung: Data length=24 is not 68 or 100 or 6
09:56:37.349 -> Bose: Data length=24 is not 36
09:56:37.395 -> MagiQuest: Bad packet length - got 24, expected 112
09:56:37.441 -> Space:
09:56:37.441 -> 0: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0
09:56:37.488 -> 10: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
09:56:37.534 -> 20: | 0 | 0 | 0 | 0 | 0 | 5
09:56:37.581 -> Mark:
09:56:37.581 -> 0: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 6
09:56:37.628 -> 10: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
09:56:37.674 -> 20: | 0 | 0 | 0 | 0 | 0 | 4 | 0
09:56:37.721 -> Mark=1300 is not 450 PULSE_DISTANCE: Decode failed
09:56:37.768 -> Protocol=UNKNOWN Hash=0x1D2FEFF6 12 bits (incl. gap and start) received

Fernseher:

Wenn ich die Fernbedienung meines Fernsehers auslese, bekomme ich Werte, die keinen Fehler produzieren:

09:58:45.563 -> Protocol=NEC Address=0x4 Command=0x0 Raw-Data=0xFF00FB04 32 bits LSB first
09:58:55.315 -> Protocol=NEC Address=0x4 Command=0x11 Raw-Data=0xEE11FB04 32 bits LSB first
09:58:55.875 -> Protocol=NEC Address=0x4 Command=0x12 Raw-Data=0xED12FB04 32 bits LSB first
09:58:56.388 -> Protocol=NEC Address=0x4 Command=0x13 Raw-Data=0xEC13FB04 32 bits LSB first

IR-Fernbedienung aus Arduino "Bastelkit"
09:59:52.909 -> Protocol=NEC Address=0x0 Command=0x16 Raw-Data=0xE916FF00 32 bits LSB first
09:59:52.955 -> Protocol=NEC Address=0x0 Command=0x16 Repeat gap=39100us
09:59:53.518 -> Protocol=NEC Address=0x0 Command=0xC Raw-Data=0xF30CFF00 32 bits LSB first
09:59:54.218 -> Protocol=NEC Address=0x0 Command=0x8 Raw-Data=0xF708FF00 32 bits LSB first
09:59:55.105 -> Protocol=NEC Address=0x0 Command=0x19 Raw-Data=0xE619FF00 32 bits LSB first
09:59:55.661 -> Protocol=NEC Address=0x0 Command=0x18 Raw-Data=0xE718FF00 32 bits LSB first
09:59:56.309 -> Protocol=NEC Address=0x0 Command=0x5A Raw-Data=0xA55AFF00 32 bits LSB first
09:59:56.866 -> Protocol=NEC Address=0x0 Command=0xD Raw-Data=0xF20DFF00 32 bits LSB first
09:59:57.378 -> Protocol=NEC Address=0x0 Command=0x9 Raw-Data=0xF609FF00 32 bits LSB first

Hat jemand einen Lösungsvorschlag, wie ich die Fernbedienung des Ventilators entschlüsseln kann? Ziel ist es eine Fernbedineung selbst zu bauen, und diese mit einem ESP8266 zu steuern.

Danke

Poste mal einen Link deiner verwendeten IR-Library.

Ich verwende diese Bibliothek:

Lass mal das ReceiveDump Beispiel laufen und poste die Timings.

Es kommt sehr oft vor das die Lib den IR Code nicht könnt. Oder die Fernbedinung sendet auf anderer Trägerfrequenz, dadurch kommt nur unsin raus

Hier das Resultat, der Fernbedinung, die nicht ausgelesenw erden kann:

10:38:01.168 -> START C:\Users\Christian\Documents\Arduino\libraries\IRremote\examples\ReceiveDump\ReceiveDump.ino from May 30 2022
10:38:01.168 -> Using library version 3.6.1
10:38:01.168 -> Ready to receive IR signals of protocols: NEC, Panasonic/Kaseikyo, Denon/Sharp, Sony, RC5, RC6, LG, JVC, Samsung, Whynter, Lego Power Functions, Bosewave , MagiQuest, Universal Distance, Hash at pin 2
10:38:05.599 -> 
10:38:05.599 -> 
10:38:05.599 -> Protocol=UNKNOWN Hash=0xA32AB931 12 bits (incl. gap and start) received
10:38:05.599 -> 
10:38:05.599 -> Raw result in internal ticks (50 us) - with leading gap
10:38:05.599 -> rawData[24]: 
10:38:05.599 ->      -65535
10:38:05.599 ->      +  25,-   9     +  25,-   8     +   8,-  25     +  25,-   9
10:38:05.599 ->      +  24,-   9     +   8,-  25     +   8,-  25     +   8,-  26
10:38:05.599 ->      +   8,-  25     +   8,-  25     +   8,-  26     +  24
10:38:05.599 -> Raw result in microseconds - with leading gap
10:38:05.599 -> rawData[24]: 
10:38:05.599 ->      -3276750
10:38:05.599 ->      +1250,- 450     +1250,- 400     + 400,-1250     +1250,- 450
10:38:05.599 ->      +1200,- 450     + 400,-1250     + 400,-1250     + 400,-1300
10:38:05.645 ->      + 400,-1250     + 400,-1250     + 400,-1300     +1200
10:38:05.645 -> 
10:38:05.645 -> Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
10:38:05.645 -> uint8_t rawTicks[23] = {25,9, 25,8, 8,25, 25,9, 24,9, 8,25, 8,25, 8,26, 8,25, 8,25, 8,26, 24};  // Protocol=UNKNOWN Hash=0xA32AB931 12 bits (incl. gap and start) received
10:38:05.645 -> 
10:38:05.645 -> Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
10:38:05.645 -> uint16_t rawData[23] = {1230,470, 1230,420, 380,1270, 1230,470, 1180,470, 380,1270, 380,1270, 380,1320, 380,1270, 380,1270, 380,1320, 1180};  // Protocol=UNKNOWN Hash=0xA32AB931 12 bits (incl. gap and start) received
10:38:05.692 -> 
10:38:05.692 -> Pronto Hex as string
10:38:05.692 -> char prontoData[ ] = "0000 006D 000C 0000 0031 0011 0031 000F 0010 002F 0031 0011 002F 0011 0010 002F 0010 002F 0010 0031 0010 002F 0010 002F 0010 0031 002F 06C3 ";

Bei der Fernbedienung, die keine Fehlermedlung verursacht sieht es so aus:

10:39:45.275 -> START C:\Users\Christian\Documents\Arduino\libraries\IRremote\examples\ReceiveDump\ReceiveDump.ino from May 30 2022
10:39:45.275 -> Using library version 3.6.1
10:39:45.275 -> Ready to receive IR signals of protocols: NEC, Panasonic/Kaseikyo, Denon/Sharp, Sony, RC5, RC6, LG, JVC, Samsung, Whynter, Lego Power Functions, Bosewave , MagiQuest, Universal Distance, Hash at pin 2
10:39:48.209 -> 
10:39:48.209 -> 
10:39:48.209 -> Protocol=NEC Address=0x0 Command=0x16 Raw-Data=0xE916FF00 32 bits LSB first
10:39:48.209 -> 
10:39:48.209 -> Raw result in internal ticks (50 us) - with leading gap
10:39:48.209 -> rawData[68]: 
10:39:48.209 ->      -56586
10:39:48.209 ->      + 180,-  88     +  12,-  11     +  12,-  10     +  12,-  11
10:39:48.209 ->      +  12,-  10     +  12,-  11     +  11,-  11     +  12,-  10
10:39:48.209 ->      +  12,-  11     +  12,-  33     +  11,-  34     +  11,-  33
10:39:48.209 ->      +  12,-  33     +  12,-  33     +  12,-  33     +  12,-  33
10:39:48.255 ->      +  11,-  33     +  12,-  11     +  12,-  33     +  11,-  33
10:39:48.255 ->      +  12,-  11     +  12,-  33     +  11,-  11     +  12,-  11
10:39:48.255 ->      +  11,-  11     +  12,-  33     +  12,-  10     +  12,-  11
10:39:48.255 ->      +  11,-  33     +  12,-  11     +  12,-  33     +  11,-  33
10:39:48.255 ->      +  12,-  33     +  12
10:39:48.255 -> Raw result in microseconds - with leading gap
10:39:48.255 -> rawData[68]: 
10:39:48.255 ->      -2829300
10:39:48.255 ->      +9000,-4400     + 600,- 550     + 600,- 500     + 600,- 550
10:39:48.255 ->      + 600,- 500     + 600,- 550     + 550,- 550     + 600,- 500
10:39:48.255 ->      + 600,- 550     + 600,-1650     + 550,-1700     + 550,-1650
10:39:48.301 ->      + 600,-1650     + 600,-1650     + 600,-1650     + 600,-1650
10:39:48.301 ->      + 550,-1650     + 600,- 550     + 600,-1650     + 550,-1650
10:39:48.301 ->      + 600,- 550     + 600,-1650     + 550,- 550     + 600,- 550
10:39:48.301 ->      + 550,- 550     + 600,-1650     + 600,- 500     + 600,- 550
10:39:48.301 ->      + 550,-1650     + 600,- 550     + 600,-1650     + 550,-1650
10:39:48.301 ->      + 600,-1650     + 600
10:39:48.301 -> 
10:39:48.301 -> Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
10:39:48.301 -> uint8_t rawTicks[67] = {180,88, 12,11, 12,10, 12,11, 12,10, 12,11, 11,11, 12,10, 12,11, 12,33, 11,34, 11,33, 12,33, 12,33, 12,33, 12,33, 11,33, 12,11, 12,33, 11,33, 12,11, 12,33, 11,11, 12,11, 11,11, 12,33, 12,10, 12,11, 11,33, 12,11, 12,33, 11,33, 12,33, 12};  // Protocol=NEC Address=0x0 Command=0x16 Raw-Data=0xE916FF00 32 bits LSB first
10:39:48.347 -> 
10:39:48.347 -> Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
10:39:48.347 -> uint16_t rawData[67] = {8980,4420, 580,570, 580,520, 580,570, 580,520, 580,570, 530,570, 580,520, 580,570, 580,1670, 530,1720, 530,1670, 580,1670, 580,1670, 580,1670, 580,1670, 530,1670, 580,570, 580,1670, 530,1670, 580,570, 580,1670, 530,570, 580,570, 530,570, 580,1670, 580,520, 580,570, 530,1670, 580,570, 580,1670, 530,1670, 580,1670, 580};  // Protocol=NEC Address=0x0 Command=0x16 Raw-Data=0xE916FF00 32 bits LSB first
10:39:48.394 -> 
10:39:48.394 -> uint16_t address = 0x0;
10:39:48.394 -> uint16_t command = 0x16;
10:39:48.394 -> uint32_t data = 0xE916FF00;
10:39:48.394 -> 
10:39:48.394 -> Pronto Hex as string
10:39:48.394 -> char prontoData[] = "0000 006D 0022 0000 015B 00A8 0018 0014 0018 0012 0018 0014 0018 0012 0018 0014 0016 0014 0018 0012 0018 0014 0018 003F 0016 0041 0016 003F 0018 003F 0018 003F 0018 003F 0018 003F 0016 003F 0018 0014 0018 003F 0016 003F 0018 0014 0018 003F 0016 0014 0018 0014 0016 0014 0018 003F 0018 0012 0018 0014 0016 003F 0018 0014 0018 003F 0016 003F 0018 003F 0018 06C3 ";

Kann jemand mit den Daten was anfangen und mir weiterhelfen?

Stichwort: Beispiele : IrSendDemo
Da haste ein Beispiel mit irsend.sendRaw drin.
Musste nur mit deinen Daten anpassen.

SendRawDemo anschauen. Arduino-IRremote/SendRawDemo.ino at master · Arduino-IRremote/Arduino-IRremote · GitHub

Müsste ich dazu nicht erst wissen, welche Daten ich schicken will? Das auslesen der Fernbedienung gibt ja den Fehler "Protocol=UNKNOWN" aus.

Du hast die Daten doch gepostet.
Hast Du Dir das Beispiel schon angesehen?
Dann wäre Dir die Ähnlichkeit aufgefallen.

Das bedeutet, die Bibliothek kennt die Fernbedienung Deines Ventilators nicht. Wenn aber derselbe Knopf auf der Fernbedienung immer zu denselben RAW-Daten führt, dann ist das auch nicht notwendig, denn dann sendest Du eben diese RAW-Daten mit dem Arduino. Die Anzahl der Knöpfe ist ja endlich.

Danke für die Antworten. Ich habe mir die SendRawDemo angesehen und meine auch verstanden zu haben, was der Code macht.

Nun habe ich folgendes Problem. Immer wenn ich den Code bei mir einbau kommt folgende Meldung: 'IrSender' was not declared in this scope

Aber ich definiere doch den IR Sender hier, oder sehe ich das falsch?

#if defined(IR_SEND_PIN)
    IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin
#else
    IrSender.begin(3, ENABLE_LED_FEEDBACK); // Specify send pin and enable feedback LED at default feedback LED pin
#endif

Ich habe schon viel herumprobiert um die Lösung selbst zu finden, den kompletten void setup und den void loop Teil nach und nach in meinen code kopiert und oben alles so definiert wie im Beispielcode.

Ich habe hier scheinbar noch eine Wissenslücke... Kann da jamend weiterhelfen? Wo wird im Beispiel IrSender definiert?

Hast Du die Datei PinDefinitionsAndMore.h eingebunden?

Ja, die habe ich oben eingebunden. Ich bin gerade etwas ratlos. Hier mal der ganze Code, bitte nicht zu doll hauen, ich lerne noch....


#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "fauxmoESP.h"
#include "credentials.h"
#include "PinDefinitionsAndMore.h"
#include <IRremoteESP8266.h>
#include <IRsend.h>

#define SERIAL_BAUDRATE 115200

#define ID_ventilator "Ventilator"

//-------------------------------WLAN EINSTELLUNGEN-------------------------------------------------------------------------------------

const char* ssid ="***";
const char* password = "***";
const char* dns_name = "esp8266";

//------------------------------fuaxmo definition--------------------------------------------------------------------------------------

//fauxmoESP Objekt anlegen
fauxmoESP fauxmo;

//------------------------------Definiton Befehlsmerker--------------------------------------------------------------------------------------

bool merkerNeuerBefehl = false;
unsigned char befehlValue = 0;


//------------------------------setup------------------------------------------------------------------------------------------------

void setup() {

Serial.begin(SERIAL_BAUDRATE);
Serial.println("ESP Gestartet");

irsend.begin();
  
    pinMode(LED_BUILTIN, OUTPUT);

    Serial.begin(SERIAL_BAUDRATE);
#if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) || defined(SERIALUSB_PID) || defined(ARDUINO_attiny3217)
    delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor!
#endif
    // Just to know which program is running on my Arduino
    Serial.println(F("Nur eine Testanzeige"));

#if defined(IR_SEND_PIN)
    IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin
#else
    IrSender.begin(3, ENABLE_LED_FEEDBACK); // Specify send pin and enable feedback LED at default feedback LED pin
#endif

    Serial.print(F("Ready to send IR signals at pin "));
#if defined(ARDUINO_ARCH_STM32) || defined(ESP8266)
    Serial.println(IR_SEND_PIN_STRING);
#else
    Serial.print(IR_SEND_PIN);
#endif
}

/*
 * NEC address=0xFB0C, command=0x18
 *
 * This is data in byte format.
 * The uint8_t/byte elements contain the number of ticks in 50 us.
 * The uint16_t format contains the (number of ticks * 50) if generated by IRremote,
 * so the uint16_t format has exact the same resolution but requires double space.
 * With the uint16_t format, you are able to modify the timings to meet the standards,
 * e.g. use 560 (instead of 11 * 50) for NEC or use 432 for Panasonic. But in this cases,
 * you better use the timing generation functions e.g. sendNEC() directly.
 */
const uint8_t irSignalP[] PROGMEM
= { 180, 90 /*Start bit*/, 11, 11, 11, 11, 11, 34, 11, 34/*0011 0xC of 16 bit address LSB first*/, 11, 11, 11, 11, 11, 11, 11,
        11/*0000*/, 11, 34, 11, 34, 11, 11, 11, 34/*1101 0xB*/, 11, 34, 11, 34, 11, 34, 11, 34/*1111*/, 11, 11, 11, 11, 11, 11, 11,
        34/*0001 0x08 of command LSB first*/, 11, 34, 11, 11, 11, 11, 11, 11/*1000 0x01*/, 11, 34, 11, 34, 11, 34, 11,
        11/*1110 Inverted 8 of command*/, 11, 11, 11, 34, 11, 34, 11, 34/*0111 inverted 1 of command*/, 11 /*stop bit*/};



//------------------------------WLAN und DNS Server Starten----------------------------------------------------------------------------

WiFi.begin(ssid,password);

Serial.print("Verbindung wird hergestellt . . . ");
while (WiFi.status() != WL_CONNECTED)
{
  delay(500);
  Serial.print(". ");
}

Serial.println();
// Prüfen warum das so nicht geht!!! Serial.println("Verbunden! IP-Adresse:" + String(WiFi.localIP());
Serial.println("Verbunden! IP-Adresse:");
Serial.println(WiFi.localIP());


//----------------------------------------Fauxmo Server wird gestartet-------------------------------------------------------------------

fauxmo.createServer(true);
fauxmo.setPort(80);
fauxmo.enable(true);

fauxmo.addDevice(ID_ventilator);
Serial.println("ALEXA Gerät " + String(ID_ventilator) + " hizugefügt");

 fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) {
        
        // Callback when a command from Alexa is received. 
        // You can use device_id or device_name to choose the element to perform an action onto (relay, LED,...)
        // State is a boolean (ON/OFF) and value a number from 0 to 255 (if you say "set kitchen light to 50%" you will receive a 128 here).
        // Just remember not to delay too much here, this is a callback, exit as soon as possible.
        // If you have to do something more involved here set a flag and process it in your main loop.
        
        //value (4 bis 254) in ganzzahligen Prozentwert (1 bis 100 %) umrechnen
      unsigned char valueProzent = (unsigned char)((float)value * 0.396 - 0.584 + 0.5); //(+ 0.5 zum Runden)
      Serial.printf("[MAIN] Geraet #%d (%s) Status: %s Value: %d (%d %%)\n", device_id, device_name, state ? "ON" : "OFF", value, valueProzent);

        // Checking for device_id is simpler if you are certain about the order they are loaded and it does not change.
        // Otherwise comparing the device_name is safer.

        if ((strcmp(device_name, "VentiArduino") == 0 && valueProzent <= 100 && valueProzent >= 1)) {
        //Den Wert von value bzw. valueProzent fuer die verschiedenen Zustaende/Tasten der Fernbedienung nutzen,
        //valueProzent liegt zwischen 1% und 100%.
        //Die eigentliche Umsetzung der Befehle erfolgt in der loop() (siehe unten),
        //damit hier die Rueckmeldung an Alexa schneller erfolgt.
        befehlValue = valueProzent;
        merkerNeuerBefehl = true;
        }
        
    });



}

//----------------------------------------Loop-----------------------------------------------
void loop() {
}

Die Deklaration von "irsend" fehlt. Mal oberhalb von setup() ergänzen:

  IRsend irsend;

Außerdem gibt es dann auch noch den "IrSender", der ebenfalls nicht deklariert ist. Irgendetwas ist da wohl doppelt. Vielleicht die Zeile "irsend.begin();" löschen und dann vor setup()

  IRsend IrSender;

? Je nachdem mit welchem Objekt Du weitermachen willlst ....

Guck noch mal genau in das Beispiel, insbesondere auf die includes.

Im loop fehlt noch

fauxmo.handle();
1 Like

Das glaube ich dir, und dann solltest du nicht mit dem Kopf durch die Wand gehen wollen.

Also fang klein an und gehe Stück für Stück vor.
Verwende aus deiner Library "IRremote" nur das Beispiel "SimpleReceiver.ino" und teste da alle Möglichkeiten indem du die einzelnen Protokolle nacheinander freigibst, alle anderen sperren.

Deine Konfiguration kannst du wie bisher selbst frei gestalten, oder du verwendest die " PinDefinitionsAndMore.h" nach korrekter Konfiguration.

Erst wenn das funktioniert und du hast deinen IR-Code, solltest du weiter machen. Und das auch nur "Step by Step". Anders hast du keine Chance es zu lernen.
Deinen kompletten Sketch legst du erst mal beiseite.

Ich habe weder einen ESP8266 noch Deine Fernbedienung, aber noch nie einen IR-Empfänger an meinen ESP32 angeschlossen. Also lade ich mir das Bibliotheksbeispiel ReceiveDump.ino in eine eigene Datei, um mal einen Test zu starten. Ich muß noch #define LED_BUILTIN 13 ergänzen, dann bekomme ich folgende Ausgabe für meine Grundig Fernbedienung:

Protocol=RC5 Address=0x10 Command=0xC Toggle=1 Raw-Data=0x1C0C 13 bits MSB first

Raw result in internal ticks (50 us) - with leading gap
rawData[24]: 
     -65535
     +  18,-  17     +  18,-  17     +  18,-  17     +  36,-  16
     +  19,-  16     +  19,-  16     +  19,-  16     +  18,-  17
     +  18,-  35     +  18,-  16     +  36,-  17     +  18
Raw result in microseconds - with leading gap
rawData[24]: 
     -3276750
     + 900,- 850     + 900,- 850     + 900,- 850     +1800,- 800
     + 950,- 800     + 950,- 800     + 950,- 800     + 900,- 850
     + 900,-1750     + 900,- 800     +1800,- 850     + 900

Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
uint8_t rawTicks[23] = {18,17, 18,17, 18,17, 36,16, 19,16, 19,16, 19,16, 18,17, 18,35, 18,16, 36,17, 18};  // Protocol=RC5 Address=0x10 Command=0xC Toggle=1 Raw-Data=0x1C0C 13 bits MSB first

Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
uint16_t rawData[23] = {880,870, 880,870, 880,870, 1780,820, 930,820, 930,820, 930,820, 880,870, 880,1770, 880,820, 1780,870, 880};  // Protocol=RC5 Address=0x10 Command=0xC Toggle=1 Raw-Data=0x1C0C 13 bits MSB first

uint16_t address = 0x10;
uint16_t command = 0xC;
uint32_t data = 0x1C0C;

Pronto Hex as string
char prontoData[] = "0000 006D 000C 0000 0023 0020 0023 0020 0023 0020 0046 001E 0025 001E 0025 001E 0025 001E 0023 0020 0023 0043 0023 001E 0046 0020 0023 06C3 ";

Anstelle von "Protocol=RC5" bekommst Du "Protocol=UNKNOWN", was bedeutet, der Bibliothek ist der Hersteller und das Protokoll unbekannt. Das ist eine kleine Hürde, aber nicht mehr.

Frage 1: Bekommst Du mit dem Testprogramm immer die selben RAW-Daten?

Da Du einen Ventilator steuern möchtest, fallen mir noch diese Zeilen in der Datei auf:

//#define RAW_BUFFER_LENGTH  750  // 750 is the value for air condition remotes.
...
//#define RECORD_GAP_MICROS 12000 // Activate it for some LG air conditioner protocols

Wenn ich die bei mir aktiviere, ändert sich erwartungsgemäß nichts, bei Dir könnte das anders sein.

Frage 2: Ändert sich etwas, wenn Du die "air condition" Zeilen aktivierst?

Die Datei PinDefinitionsAndMore.h möchte ich nicht immer einbinden müssen, also hole ich mir die für meinen ESP32 notwendigen Definitionen heraus. Nach ein paar kosmetischen Änderungen sieht das alleinstehende Programm dann so aus:

#include <Arduino.h>

#define RAW_BUFFER_LENGTH  750  // 750 is the value for air condition remotes.

/*
   Define macros for input and output pin etc.
*/
#define SEND_PWM_BY_TIMER           // nur ESP32
#define IR_RECEIVE_PIN          15  // D15
#define IR_SEND_PIN              4  // D4
#define LED_BUILTIN             13  // bei 
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)

/*
   You can change this value accordingly to the receiver module you use.
   The required value can be derived from the timings printed here.
   Keep in mind that the timings may change with the distance
   between sender and receiver as well as with the ambient light intensity.
*/
#define MARK_EXCESS_MICROS    20 // recommended for the cheap VS1838 modules

#define RECORD_GAP_MICROS 12000 // Activate it for some LG air conditioner protocols
//#define DEBUG // Activate this for lots of lovely debug output from the decoders.
#define INFO // To see valuable informations from universal decoder for pulse width or pulse distance protocols

#include <IRremote.hpp>

//+=============================================================================
// Configure the Arduino
//
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);

  Serial.begin(115200);   // Status message will be sent to PC at 9600 baud
  delay(500); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor!
  // Just to know which program is running on my Arduino
  Serial.println(F("\n-------------\nSTART " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));

  // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);

  Serial.print(F("Ready to receive IR signals of protocols: "));
  printActiveIRProtocols(&Serial);
  Serial.println(F("at pin " STR(IR_RECEIVE_PIN)));

  // infos for receive
  Serial.print(RECORD_GAP_MICROS);
  Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed"));
  Serial.print(MARK_EXCESS_MICROS);
  Serial.println(F(" us are subtracted from all marks and added to all spaces for decoding"));
}

//+=============================================================================
// The repeating section of the code
//
void loop() {
  if (IrReceiver.decode()) {  // Grab an IR code
    // Check if the buffer overflowed
    if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) {
      Serial.println(F("Overflow detected"));
      Serial.println(F("Try to increase the \"RAW_BUFFER_LENGTH\" value of " STR(RAW_BUFFER_LENGTH) " in " __FILE__));
      // see also https://github.com/Arduino-IRremote/Arduino-IRremote#modifying-compile-options-with-sloeber-ide
    } else {
      Serial.println();                               // 2 blank lines between entries
      Serial.println();
      IrReceiver.printIRResultShort(&Serial);
      Serial.println();
      Serial.println(F("Raw result in internal ticks (50 us) - with leading gap"));
      IrReceiver.printIRResultRawFormatted(&Serial, false); // Output the results in RAW format
      Serial.println(F("Raw result in microseconds - with leading gap"));
      IrReceiver.printIRResultRawFormatted(&Serial, true);  // Output the results in RAW format
      Serial.println();                               // blank line between entries
      Serial.print(F("Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS="));
      Serial.println(MARK_EXCESS_MICROS);
      IrReceiver.compensateAndPrintIRResultAsCArray(&Serial, false); // Output the results as uint8_t source code array of ticks
      Serial.print(F("Result as microseconds array - compensated with MARK_EXCESS_MICROS="));
      Serial.println(MARK_EXCESS_MICROS);
      IrReceiver.compensateAndPrintIRResultAsCArray(&Serial, true); // Output the results as uint16_t source code array of micros
      IrReceiver.printIRResultAsCVariables(&Serial);  // Output address and data as source code variables

      IrReceiver.compensateAndPrintIRResultAsPronto(&Serial);

      /*
         Example for using the compensateAndStorePronto() function.
         Creating this String requires 2210 bytes program memory and 10 bytes RAM for the String class.
         The String object itself requires additional 440 bytes RAM from the heap.
         This values are for an Arduino UNO.
      */
       Serial.println();                                  // blank line between entries
      String ProntoHEX = F("Pronto HEX contains: ");      // Assign string to ProtoHex string object
      if (int size = IrReceiver.compensateAndStorePronto(&ProntoHEX)) {   // Dump the content of the IReceiver Pronto HEX to the String object
        // Append compensateAndStorePronto() size information to the String object (requires 50 bytes heap)
        ProntoHEX += F("\r\nProntoHEX is ");              // Add codes size information to the String object
        ProntoHEX += size;
        ProntoHEX += F(" characters long and contains "); // Add codes count information to the String object
        ProntoHEX += size / 5;
        ProntoHEX += F(" codes");
        Serial.println(ProntoHEX.c_str());                // Print to the serial console the whole String object
        Serial.println();                                 // blank line between entries
      }
    }
    IrReceiver.resume();                                  // Prepare for the next value
  }
}

Ausgabe:

-------------
START C:\Users\User\AppData\Local\Temp\arduino_modified_sketch_547526\Test_Forum.ino from May 31 2022
Using library version 3.6.1
Ready to receive IR signals of protocols: NEC, Panasonic/Kaseikyo, Denon/Sharp, Sony, RC5, RC6, LG, JVC, Samsung, Whynter, Lego Power Functions, Bosewave , MagiQuest, Universal Distance, Hash at pin 15
12000 us is the (minimum) gap, after which the start of a new IR packet is assumed
20 us are subtracted from all marks and added to all spaces for decoding


Protocol=RC5 Address=0x10 Command=0xC Toggle=1 Raw-Data=0x1C0C 13 bits MSB first

Raw result in internal ticks (50 us) - with leading gap
rawData[24]: 
     -65535
     +  18,-  17     +  18,-  17     +  18,-  17     +  36,-  16
     +  18,-  17     +  18,-  17     +  18,-  17     +  18,-  17
     +  18,-  34     +  19,-  16     +  36,-  17     +  18
Raw result in microseconds - with leading gap
rawData[24]: 
     -3276750
     + 900,- 850     + 900,- 850     + 900,- 850     +1800,- 800
     + 900,- 850     + 900,- 850     + 900,- 850     + 900,- 850
     + 900,-1700     + 950,- 800     +1800,- 850     + 900

Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
uint8_t rawTicks[23] = {18,17, 18,17, 18,17, 36,16, 18,17, 18,17, 18,17, 18,17, 18,34, 19,16, 36,17, 18};  // Protocol=RC5 Address=0x10 Command=0xC Toggle=1 Raw-Data=0x1C0C 13 bits MSB first

Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
uint16_t rawData[23] = {880,870, 880,870, 880,870, 1780,820, 880,870, 880,870, 880,870, 880,870, 880,1720, 930,820, 1780,870, 880};  // Protocol=RC5 Address=0x10 Command=0xC Toggle=1 Raw-Data=0x1C0C 13 bits MSB first

uint16_t address = 0x10;
uint16_t command = 0xC;
uint32_t data = 0x1C0C;

Pronto Hex as string
char prontoData[] = "0000 006D 000C 0000 0023 0020 0023 0020 0023 0020 0046 001E 0023 0020 0023 0020 0023 0020 0023 0020 0023 0041 0025 001E 0046 0020 0023 06C3 ";

Pronto HEX contains: 0000 006D 000C 0000 0023 0020 0023 0020 0023 0020 0046 001E 0023 0020 0023 0020 0023 0020 0023 0020 0023 0041 0025 001E 0046 0020 0023 06C3 
ProntoHEX is 72 characters long and contains 14 codes

Frage 3: Bekommst Du das auch so hin?

Weitere Schritte:

  • Du suchst Dir ein passendes RAW-Sendebeispiel und verschickst zunächst die RAW-Daten Deiner NEC-Fernbedienung, um die Sende-IR-Diode zu testen.
  • Dann verschickst Du die RAW-Daten für den Ventilator.
  • Dann ergänzt Du die IR-Funktionalität in Deinem Hauptprogramm.

Basierend auf dem Beispiel SendRawDemo.ino habe ich mal auf einem UNO versucht, Deine RAW-Daten zu verschicken:

#include <Arduino.h>
#define IR_RECEIVE_PIN      2 // To be compatible with interrupt example, pin 2 is chosen here.
#define IR_SEND_PIN         3
#include <IRremote.hpp>

void setup() {
  Serial.begin(115200);
  delay(500);
  pinMode(LED_BUILTIN, OUTPUT);

  IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin
  Serial.print(F("Ready to send IR signals at pin "));
  Serial.println(IR_SEND_PIN);
}

const uint8_t irSignalP[] PROGMEM
= {25,9, 25,8, 8,25, 25,9, 24,9, 8,25, 8,25, 8,26, 8,25, 8,25, 8,26, 24};  // Protocol=UNKNOWN Hash=0xA32AB931 12 bits (incl. gap and start)

void loop() {
  Serial.println(F("Sende Daten für Ventilator Taste XY; Hash=0xA32AB931"));
  IrSender.sendRaw_P(irSignalP, sizeof(irSignalP) / sizeof(irSignalP[0]), NEC_KHZ);
  delay(3000);
}

Mein ESP32 empfängt dann:

Protocol=UNKNOWN Hash=0xA32AB931 12 bits (incl. gap and start) received

Raw result in internal ticks (50 us) - with leading gap
rawData[24]: 
     -60012
     +  27,-   7     +  26,-   7     +  10,-  24     +  26,-   8
     +  25,-   8     +   9,-  25     +   8,-  25     +   9,-  25
     +   9,-  24     +   9,-  25     +   8,-  26     +  25
Raw result in microseconds - with leading gap
rawData[24]: 
     -3000600
     +1350,- 350     +1300,- 350     + 500,-1200     +1300,- 400
     +1250,- 400     + 450,-1250     + 400,-1250     + 450,-1250
     + 450,-1200     + 450,-1250     + 400,-1300     +1250

Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
uint8_t rawTicks[23] = {27,7, 26,7, 10,24, 26,8, 25,8, 9,25, 8,25, 9,25, 9,24, 9,25, 8,26, 25};  // Protocol=UNKNOWN Hash=0xA32AB931 12 bits (incl. gap and start) received

Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
uint16_t rawData[23] = {1330,370, 1280,370, 480,1220, 1280,420, 1230,420, 430,1270, 380,1270, 430,1270, 430,1220, 430,1270, 380,1320, 1230};  // Protocol=UNKNOWN Hash=0xA32AB931 12 bits (incl. gap and start) received

Pronto Hex as string
char prontoData[] = "0000 006D 000C 0000 0035 000D 0033 000D 0014 002D 0033 000F 0031 000F 0012 002F 0010 002F 0012 002F 0012 002D 0012 002F 0010 0031 0031 06C3 ";

Pronto HEX contains: 0000 006D 000C 0000 0035 000D 0033 000D 0014 002D 0033 000F 0031 000F 0012 002F 0010 002F 0012 002F 0012 002D 0012 002F 0010 0031 0031 06C3 
ProntoHEX is 74 characters long and contains 14 codes

Was wohl Dein Ventilator dazu sagen würde?

Für jede Taste der Fernbedienung benötigst Du dann je ein irSignalP.

Nur zur Erinnerung: IR-Sendedioden benötigen mehr Strom, als ein Arduino-Pin oder gar ESP8266 liefern kann, weshalb ein Transistor notwendig ist!

Vielen Dank für deine Antwort.

Zur Frage 1: Nein die Daten können teilweise etwas variieren, ich denke aber, es sind Empfangsfehler, da sich die Daten sehr ähnlich sind und auch öfter hintereinander die gleichen Daten gesendet werden.

Zur Frage 2 Wenn ich die beiden Zeilen aktivire unterscheiden sich die Daten deutlich

//#define RECORD_GAP_MICROS 12000 // Activate it for some LG air conditioner protocols
//#define RAW_BUFFER_LENGTH  750  // 750 is the value for air condition remotes.
Ohne aukommentierte Zeilen
//#define RECORD_GAP_MICROS 12000 // Activate it for some LG air conditioner protocols
//#define RAW_BUFFER_LENGTH  750  // 750 is the value for air condition remotes.

POWER
21:06:07.855 -> 
21:06:07.855 -> 
21:06:07.855 -> Protocol=UNKNOWN Hash=0xA32AB931 12 bits (incl. gap and start) received
21:06:07.855 -> 
21:06:07.855 -> Raw result in internal ticks (50 us) - with leading gap
21:06:07.902 -> rawData[24]: 
21:06:07.902 ->      -65535
21:06:07.902 ->      +  24,-   9     +  24,-   9     +   8,-  26     +  24,-   9
21:06:07.902 ->      +  24,-   9     +   7,-  27     +   7,-  26     +   7,-  26
21:06:07.902 ->      +   7,-  26     +   8,-  26     +   7,-  26     +  24
21:06:07.902 -> Raw result in microseconds - with leading gap
21:06:07.902 -> rawData[24]: 
21:06:07.902 ->      -3276750
21:06:07.902 ->      +1200,- 450     +1200,- 450     + 400,-1300     +1200,- 450
21:06:07.902 ->      +1200,- 450     + 350,-1350     + 350,-1300     + 350,-1300
21:06:07.902 ->      + 350,-1300     + 400,-1300     + 350,-1300     +1200
21:06:07.902 -> 
21:06:07.902 -> Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
21:06:07.948 -> uint8_t rawTicks[23] = {24,9, 24,9, 8,26, 24,9, 24,9, 7,27, 7,26, 7,26, 7,26, 8,26, 7,26, 24};  // Protocol=UNKNOWN Hash=0xA32AB931 12 bits (incl. gap and start) received
21:06:07.948 -> 
21:06:07.948 -> Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
21:06:07.948 -> uint16_t rawData[23] = {1180,470, 1180,470, 380,1320, 1180,470, 1180,470, 330,1370, 330,1320, 330,1320, 330,1320, 380,1320, 330,1320, 1180};  // Protocol=UNKNOWN Hash=0xA32AB931 12 bits (incl. gap and start) received
21:06:07.948 -> 
21:06:07.948 -> Pronto Hex as string
21:06:07.948 -> char prontoData[] = "0000 006D 000C 0000 002F 0011 002F 0011 0010 0031 002F 0011 002F 0011 000E 0033 000E 0031 000E 0031 000E 0031 0010 0031 000E 0031 002F 06C3 ";

SPEED
21:06:23.213 -> 
21:06:23.213 -> 
21:06:23.213 -> Protocol=UNKNOWN Hash=0x143226DB 12 bits (incl. gap and start) received
21:06:23.260 -> 
21:06:23.260 -> Raw result in internal ticks (50 us) - with leading gap
21:06:23.260 -> rawData[24]: 
21:06:23.260 ->      -65535
21:06:23.260 ->      +  24,-   9     +  24,-   9     +   8,-  26     +  24,-   9
21:06:23.260 ->      +  24,-   9     +   8,-  26     +   7,-  26     +   8,-  26
21:06:23.260 ->      +   7,-  26     +   7,-  26     +  24,-   9     +   8
21:06:23.260 -> Raw result in microseconds - with leading gap
21:06:23.260 -> rawData[24]: 
21:06:23.260 ->      -3276750
21:06:23.260 ->      +1200,- 450     +1200,- 450     + 400,-1300     +1200,- 450
21:06:23.260 ->      +1200,- 450     + 400,-1300     + 350,-1300     + 400,-1300
21:06:23.260 ->      + 350,-1300     + 350,-1300     +1200,- 450     + 400
21:06:23.307 -> 
21:06:23.307 -> Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
21:06:23.307 -> uint8_t rawTicks[23] = {24,9, 24,9, 8,26, 24,9, 24,9, 8,26, 7,26, 8,26, 7,26, 7,26, 24,9, 8};  // Protocol=UNKNOWN Hash=0x143226DB 12 bits (incl. gap and start) received
21:06:23.307 -> 
21:06:23.307 -> Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
21:06:23.307 -> uint16_t rawData[23] = {1180,470, 1180,470, 380,1320, 1180,470, 1180,470, 380,1320, 330,1320, 380,1320, 330,1320, 330,1320, 1180,470, 380};  // Protocol=UNKNOWN Hash=0x143226DB 12 bits (incl. gap and start) received
21:06:23.353 -> 
21:06:23.353 -> Pronto Hex as string
21:06:23.353 -> char prontoData[] = "0000 006D 000C 0000 002F 0011 002F 0011 0010 0031 002F 0011 002F 0011 0010 0031 000E 0031 0010 0031 000E 0031 000E 0031 002F 0011 0010 06C3 ";

TIMER
21:06:43.142 -> 
21:06:43.142 -> 
21:06:43.142 -> Protocol=UNKNOWN Hash=0x1D2FEFF6 12 bits (incl. gap and start) received
21:06:43.142 -> 
21:06:43.142 -> Raw result in internal ticks (50 us) - with leading gap
21:06:43.142 -> rawData[24]: 
21:06:43.142 ->      -65535
21:06:43.142 ->      +  25,-   8     +  25,-   8     +   9,-  25     +  25,-   8
21:06:43.142 ->      +  25,-   8     +   8,-  26     +  24,-   9     +   8,-  26
21:06:43.142 ->      +   7,-  26     +   8,-  25     +   8,-  25     +   8
21:06:43.142 -> Raw result in microseconds - with leading gap
21:06:43.188 -> rawData[24]: 
21:06:43.188 ->      -3276750
21:06:43.188 ->      +1250,- 400     +1250,- 400     + 450,-1250     +1250,- 400
21:06:43.188 ->      +1250,- 400     + 400,-1300     +1200,- 450     + 400,-1300
21:06:43.188 ->      + 350,-1300     + 400,-1250     + 400,-1250     + 400
21:06:43.188 -> 
21:06:43.188 -> Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
21:06:43.188 -> uint8_t rawTicks[23] = {25,8, 25,8, 9,25, 25,8, 25,8, 8,26, 24,9, 8,26, 7,26, 8,25, 8,25, 8};  // Protocol=UNKNOWN Hash=0x1D2FEFF6 12 bits (incl. gap and start) received
21:06:43.188 -> 
21:06:43.188 -> Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
21:06:43.234 -> uint16_t rawData[23] = {1230,420, 1230,420, 430,1270, 1230,420, 1230,420, 380,1320, 1180,470, 380,1320, 330,1320, 380,1270, 380,1270, 380};  // Protocol=UNKNOWN Hash=0x1D2FEFF6 12 bits (incl. gap and start) received
21:06:43.234 -> 
21:06:43.234 -> Pronto Hex as string
21:06:43.234 -> char prontoData[] = "0000 006D 000C 0000 0031 000F 0031 000F 0012 002F 0031 000F 0031 000F 0010 0031 002F 0011 0010 0031 000E 0031 0010 002F 0010 002F 0010 06C3 ";

OSC
21:07:00.506 -> 
21:07:00.506 -> 
21:07:00.506 -> Protocol=UNKNOWN Hash=0x39D41DC6 12 bits (incl. gap and start) received
21:07:00.506 -> 
21:07:00.506 -> Raw result in internal ticks (50 us) - with leading gap
21:07:00.506 -> rawData[24]: 
21:07:00.506 ->      -65535
21:07:00.506 ->      +  24,-   9     +  25,-   8     +   8,-  26     +  24,-   9
21:07:00.506 ->      +  24,-   9     +   8,-  26     +   7,-  26     +  24,-   9
21:07:00.506 ->      +   8,-  26     +   7,-  26     +   7,-  26     +   8
21:07:00.506 -> Raw result in microseconds - with leading gap
21:07:00.506 -> rawData[24]: 
21:07:00.506 ->      -3276750
21:07:00.506 ->      +1200,- 450     +1250,- 400     + 400,-1300     +1200,- 450
21:07:00.552 ->      +1200,- 450     + 400,-1300     + 350,-1300     +1200,- 450
21:07:00.552 ->      + 400,-1300     + 350,-1300     + 350,-1300     + 400
21:07:00.552 -> 
21:07:00.552 -> Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
21:07:00.552 -> uint8_t rawTicks[23] = {24,9, 25,8, 8,26, 24,9, 24,9, 8,26, 7,26, 24,9, 8,26, 7,26, 7,26, 8};  // Protocol=UNKNOWN Hash=0x39D41DC6 12 bits (incl. gap and start) received
21:07:00.552 -> 
21:07:00.552 -> Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
21:07:00.552 -> uint16_t rawData[23] = {1180,470, 1230,420, 380,1320, 1180,470, 1180,470, 380,1320, 330,1320, 1180,470, 380,1320, 330,1320, 330,1320, 380};  // Protocol=UNKNOWN Hash=0x39D41DC6 12 bits (incl. gap and start) received
21:07:00.599 -> 
21:07:00.599 -> Pronto Hex as string
21:07:00.599 -> char prontoData[] = "0000 006D 000C 0000 002F 0011 0031 000F 0010 0031 002F 0011 002F 0011 0010 0031 000E 0031 002F 0011 0010 0031 000E 0031 000E 0031 0010 06C3 ";

Mit auskommentierten Zeilen
//#define RECORD_GAP_MICROS 12000 // Activate it for some LG air conditioner protocols
//#define RAW_BUFFER_LENGTH  750  // 750 is the value for air condition remotes.

POWER
21:10:47.074 -> 
21:10:47.074 -> 
21:10:47.074 -> Protocol=UNKNOWN Hash=0xDA0AE878 24 bits (incl. gap and start) received
21:10:47.074 -> 
21:10:47.074 -> Raw result in internal ticks (50 us) - with leading gap
21:10:47.074 -> rawData[48]: 
21:10:47.074 ->      -65535
21:10:47.121 ->      +  25,-   9     +  24,-   9     +   8,-  26     +  24,-   8
21:10:47.121 ->      +  25,-   9     +   8,-  25     +   8,-  26     +   7,-  26
21:10:47.121 ->      +   8,-  25     +   8,-  26     +   7,-  26     +  24,- 142
21:10:47.121 ->      +  25,-   8     +  25,-   8     +   9,-  25     +  25,-   8
21:10:47.121 ->      +  25,-   8     +   8,-  26     +   8,-  25     +   8,-  26
21:10:47.121 ->      +   7,-  26     +   8,-  25     +   8,-  25     +  25
21:10:47.121 -> Raw result in microseconds - with leading gap
21:10:47.121 -> rawData[48]: 
21:10:47.121 ->      -3276750
21:10:47.121 ->      +1250,- 450     +1200,- 450     + 400,-1300     +1200,- 400
21:10:47.121 ->      +1250,- 450     + 400,-1250     + 400,-1300     + 350,-1300
21:10:47.167 ->      + 400,-1250     + 400,-1300     + 350,-1300     +1200,-7100
21:10:47.167 ->      +1250,- 400     +1250,- 400     + 450,-1250     +1250,- 400
21:10:47.167 ->      +1250,- 400     + 400,-1300     + 400,-1250     + 400,-1300
21:10:47.167 ->      + 350,-1300     + 400,-1250     + 400,-1250     +1250
21:10:47.167 -> 
21:10:47.167 -> Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
21:10:47.167 -> uint8_t rawTicks[47] = {25,9, 24,9, 8,26, 24,8, 25,9, 8,25, 8,26, 7,26, 8,25, 8,26, 7,26, 24,142, 25,8, 25,8, 9,25, 25,8, 25,8, 8,26, 8,25, 8,26, 7,26, 8,25, 8,25, 25};  // Protocol=UNKNOWN Hash=0xDA0AE878 24 bits (incl. gap and start) received
21:10:47.214 -> 
21:10:47.214 -> Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
21:10:47.214 -> uint16_t rawData[47] = {1230,470, 1180,470, 380,1320, 1180,420, 1230,470, 380,1270, 380,1320, 330,1320, 380,1270, 380,1320, 330,1320, 1180,7120, 1230,420, 1230,420, 430,1270, 1230,420, 1230,420, 380,1320, 380,1270, 380,1320, 330,1320, 380,1270, 380,1270, 1230};  // Protocol=UNKNOWN Hash=0xDA0AE878 24 bits (incl. gap and start) received
21:10:47.214 -> 
21:10:47.214 -> Pronto Hex as string
21:10:47.214 -> char prontoData[] = "0000 006D 0018 0000 0031 0011 002F 0011 0010 0031 002F 000F 0031 0011 0010 002F 0010 0031 000E 0031 0010 002F 0010 0031 000E 0031 002F 0110 0031 000F 0031 000F 0012 002F 0031 000F 0031 000F 0010 0031 0010 002F 0010 0031 000E 0031 0010 002F 0010 002F 0031 06C3 ";

SPEED
21:13:02.226 -> 
21:13:02.226 -> 
21:13:02.226 -> Protocol=UNKNOWN Hash=0x1405B4EF 24 bits (incl. gap and start) received
21:13:02.272 -> 
21:13:02.272 -> Raw result in internal ticks (50 us) - with leading gap
21:13:02.272 -> rawData[48]: 
21:13:02.272 ->      -65535
21:13:02.272 ->      +  25,-   8     +  25,-   9     +   7,-  26     +  24,-   9
21:13:02.272 ->      +  25,-   8     +   8,-  26     +   8,-  26     +   7,-  26
21:13:02.272 ->      +   7,-  26     +   7,-  27     +  23,-   9     +   8,- 159
21:13:02.272 ->      +  24,-   9     +  25,-   8     +   8,-  26     +  24,-   9
21:13:02.272 ->      +  24,-   9     +   8,-  26     +   7,-  26     +   7,-  26
21:13:02.272 ->      +   8,-  26     +   7,-  26     +  24,-   9     +   8
21:13:02.272 -> Raw result in microseconds - with leading gap
21:13:02.272 -> rawData[48]: 
21:13:02.319 ->      -3276750
21:13:02.319 ->      +1250,- 400     +1250,- 450     + 350,-1300     +1200,- 450
21:13:02.319 ->      +1250,- 400     + 400,-1300     + 400,-1300     + 350,-1300
21:13:02.319 ->      + 350,-1300     + 350,-1350     +1150,- 450     + 400,-7950
21:13:02.319 ->      +1200,- 450     +1250,- 400     + 400,-1300     +1200,- 450
21:13:02.319 ->      +1200,- 450     + 400,-1300     + 350,-1300     + 350,-1300
21:13:02.319 ->      + 400,-1300     + 350,-1300     +1200,- 450     + 400
21:13:02.319 -> 
21:13:02.319 -> Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
21:13:02.319 -> uint8_t rawTicks[47] = {25,8, 25,9, 7,26, 24,9, 25,8, 8,26, 8,26, 7,26, 7,26, 7,27, 23,9, 8,159, 24,9, 25,8, 8,26, 24,9, 24,9, 8,26, 7,26, 7,26, 8,26, 7,26, 24,9, 8};  // Protocol=UNKNOWN Hash=0x1405B4EF 24 bits (incl. gap and start) received
21:13:02.366 -> 
21:13:02.366 -> Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
21:13:02.366 -> uint16_t rawData[47] = {1230,420, 1230,470, 330,1320, 1180,470, 1230,420, 380,1320, 380,1320, 330,1320, 330,1320, 330,1370, 1130,470, 380,7970, 1180,470, 1230,420, 380,1320, 1180,470, 1180,470, 380,1320, 330,1320, 330,1320, 380,1320, 330,1320, 1180,470, 380};  // Protocol=UNKNOWN Hash=0x1405B4EF 24 bits (incl. gap and start) received
21:13:02.413 -> 
21:13:02.413 -> Pronto Hex as string
21:13:02.413 -> char prontoData[] = "0000 006D 0018 0000 0031 000F 0031 0011 000E 0031 002F 0011 0031 000F 0010 0031 0010 0031 000E 0031 000E 0031 000E 0033 002D 0011 0010 0131 002F 0011 0031 000F 0010 0031 002F 0011 002F 0011 0010 0031 000E 0031 000E 0031 0010 0031 000E 0031 002F 0011 0010 06C3 ";

TIMER
21:13:20.983 -> 
21:13:20.983 -> 
21:13:20.983 -> Protocol=UNKNOWN Hash=0xF40BF22B 24 bits (incl. gap and start) received
21:13:20.983 -> 
21:13:20.983 -> Raw result in internal ticks (50 us) - with leading gap
21:13:20.983 -> rawData[48]: 
21:13:20.983 ->      -65535
21:13:21.030 ->      +  24,-   9     +  25,-   9     +   7,-  26     +  24,-   9
21:13:21.030 ->      +  24,-   9     +   8,-  26     +  24,-   9     +   7,-  27
21:13:21.030 ->      +   7,-  26     +   7,-  26     +   7,-  26     +   8,- 159
21:13:21.030 ->      +  24,-   9     +  24,-   9     +   8,-  26     +  24,-   8
21:13:21.030 ->      +  25,-   8     +   9,-  26     +  24,-   9     +   7,-  26
21:13:21.030 ->      +   7,-  27     +   7,-  26     +   7,-  26     +   7
21:13:21.030 -> Raw result in microseconds - with leading gap
21:13:21.030 -> rawData[48]: 
21:13:21.030 ->      -3276750
21:13:21.030 ->      +1200,- 450     +1250,- 450     + 350,-1300     +1200,- 450
21:13:21.030 ->      +1200,- 450     + 400,-1300     +1200,- 450     + 350,-1350
21:13:21.076 ->      + 350,-1300     + 350,-1300     + 350,-1300     + 400,-7950
21:13:21.076 ->      +1200,- 450     +1200,- 450     + 400,-1300     +1200,- 400
21:13:21.076 ->      +1250,- 400     + 450,-1300     +1200,- 450     + 350,-1300
21:13:21.076 ->      + 350,-1350     + 350,-1300     + 350,-1300     + 350
21:13:21.076 -> 
21:13:21.076 -> Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
21:13:21.076 -> uint8_t rawTicks[47] = {24,9, 25,9, 7,26, 24,9, 24,9, 8,26, 24,9, 7,27, 7,26, 7,26, 7,26, 8,159, 24,9, 24,9, 8,26, 24,8, 25,8, 9,26, 24,9, 7,26, 7,27, 7,26, 7,26, 7};  // Protocol=UNKNOWN Hash=0xF40BF22B 24 bits (incl. gap and start) received
21:13:21.122 -> 
21:13:21.122 -> Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
21:13:21.122 -> uint16_t rawData[47] = {1180,470, 1230,470, 330,1320, 1180,470, 1180,470, 380,1320, 1180,470, 330,1370, 330,1320, 330,1320, 330,1320, 380,7970, 1180,470, 1180,470, 380,1320, 1180,420, 1230,420, 430,1320, 1180,470, 330,1320, 330,1370, 330,1320, 330,1320, 330};  // Protocol=UNKNOWN Hash=0xF40BF22B 24 bits (incl. gap and start) received
21:13:21.122 -> 
21:13:21.122 -> Pronto Hex as string
21:13:21.122 -> char prontoData[] = "0000 006D 0018 0000 002F 0011 0031 0011 000E 0031 002F 0011 002F 0011 0010 0031 002F 0011 000E 0033 000E 0031 000E 0031 000E 0031 0010 0131 002F 0011 002F 0011 0010 0031 002F 000F 0031 000F 0012 0031 002F 0011 000E 0031 000E 0033 000E 0031 000E 0031 000E 06C3 ";

OSC
21:13:33.110 -> 
21:13:33.110 -> 
21:13:33.110 -> Protocol=UNKNOWN Hash=0xCAE43BF 48 bits (incl. gap and start) received
21:13:33.110 -> 
21:13:33.110 -> Raw result in internal ticks (50 us) - with leading gap
21:13:33.110 -> rawData[96]: 
21:13:33.110 ->      -65535
21:13:33.110 ->      +  25,-   7     +  26,-   7     +  10,-  25     +  24,-   8
21:13:33.110 ->      +  26,-   7     +   9,-  26     +   8,-  25     +  24,-   9
21:13:33.110 ->      +   8,-  26     +   7,-  26     +   8,-  25     +   7,- 159
21:13:33.157 ->      +  25,-   9     +  24,-   9     +   8,-  26     +  23,-  10
21:13:33.157 ->      +  24,-   9     +   7,-  26     +   8,-  26     +  23,-  10
21:13:33.157 ->      +   7,-  26     +   7,-  26     +   8,-  26     +   7,- 181
21:13:33.157 ->      +  24,-   9     +  24,-   9     +   8,-  26     +  24,-   9
21:13:33.157 ->      +  24,-   9     +   8,-  26     +   7,-  26     +  24,-   9
21:13:33.157 ->      +   8,-  25     +   8,-  26     +   7,-  26     +   7,- 159
21:13:33.157 ->      +  25,-   9     +  24,-   9     +   8,-  25     +  24,-  10
21:13:33.157 ->      +  24,-   9     +   7,-  26     +   8,-  25     +  24,-  10
21:13:33.204 ->      +   7,-  26     +   7,-  26     +   8,-  26     +   7
21:13:33.204 -> Raw result in microseconds - with leading gap
21:13:33.204 -> rawData[96]: 
21:13:33.204 ->      -3276750
21:13:33.204 ->      +1250,- 350     +1300,- 350     + 500,-1250     +1200,- 400
21:13:33.204 ->      +1300,- 350     + 450,-1300     + 400,-1250     +1200,- 450
21:13:33.204 ->      + 400,-1300     + 350,-1300     + 400,-1250     + 350,-7950
21:13:33.204 ->      +1250,- 450     +1200,- 450     + 400,-1300     +1150,- 500
21:13:33.204 ->      +1200,- 450     + 350,-1300     + 400,-1300     +1150,- 500
21:13:33.204 ->      + 350,-1300     + 350,-1300     + 400,-1300     + 350,-9050
21:13:33.204 ->      +1200,- 450     +1200,- 450     + 400,-1300     +1200,- 450
21:13:33.251 ->      +1200,- 450     + 400,-1300     + 350,-1300     +1200,- 450
21:13:33.251 ->      + 400,-1250     + 400,-1300     + 350,-1300     + 350,-7950
21:13:33.251 ->      +1250,- 450     +1200,- 450     + 400,-1250     +1200,- 500
21:13:33.251 ->      +1200,- 450     + 350,-1300     + 400,-1250     +1200,- 500
21:13:33.251 ->      + 350,-1300     + 350,-1300     + 400,-1300     + 350
21:13:33.251 -> 
21:13:33.251 -> Result as internal ticks (50 us) array - compensated with MARK_EXCESS_MICROS=20
21:13:33.251 -> uint8_t rawTicks[95] = {25,7, 26,7, 10,25, 24,8, 26,7, 9,26, 8,25, 24,9, 8,26, 7,26, 8,25, 7,159, 25,9, 24,9, 8,26, 23,10, 24,9, 7,26, 8,26, 23,10, 7,26, 7,26, 8,26, 7,181, 24,9, 24,9, 8,26, 24,9, 24,9, 8,26, 7,26, 24,9, 8,25, 8,26, 7,26, 7,159, 25,9, 24,9, 8,25, 24,10, 24,9, 7,26, 8,25, 24,10, 7,26, 7,26, 8,26, 7};  // Protocol=UNKNOWN Hash=0xCAE43BF 48 bits (incl. gap and start) received
21:13:33.298 -> 
21:13:33.298 -> Result as microseconds array - compensated with MARK_EXCESS_MICROS=20
21:13:33.298 -> uint16_t rawData[95] = {1230,370, 1280,370, 480,1270, 1180,420, 1280,370, 430,1320, 380,1270, 1180,470, 380,1320, 330,1320, 380,1270, 330,7970, 1230,470, 1180,470, 380,1320, 1130,520, 1180,470, 330,1320, 380,1320, 1130,520, 330,1320, 330,1320, 380,1320, 330,9070, 1180,470, 1180,470, 380,1320, 1180,470, 1180,470, 380,1320, 330,1320, 1180,470, 380,1270, 380,1320, 330,1320, 330,7970, 1230,470, 1180,470, 380,1270, 1180,520, 1180,470, 330,1320, 380,1270, 1180,520, 330,1320, 330,1320, 380,1320, 330};  // Protocol=UNKNOWN Hash=0xCAE43BF 48 bits (incl. gap and start) received
21:13:33.345 -> 
21:13:33.345 -> Pronto Hex as string
21:13:33.345 -> char prontoData[] = "0000 006D 0030 0000 0031 000D 0033 000D 0014 002F 002F 000F 0033 000D 0012 0031 0010 002F 002F 0011 0010 0031 000E 0031 0010 002F 000E 0131 0031 0011 002F 0011 0010 0031 002D 0012 002F 0011 000E 0031 0010 0031 002D 0012 000E 0031 000E 0031 0010 0031 000E 015B 002F 0011 002F 0011 0010 0031 002F 0011 002F 0011 0010 0031 000E 0031 002F 0011 0010 002F 0010 0031 000E 0031 000E 0131 0031 0011 002F 0011 0010 002F 002F 0012 002F 0011 000E 0031 0010 002F 002F 0012 000E 0031 000E 0031 0010 0031 000E 06C3 ";

Zur Frage 3: Ich versuche das morgen mal, ob ich damit Daten zwischen den beiden Arduinos verschicken kann und melde mich dann nochmal.