Erstmal vielen Dank für so viele Antworten.
Hier mein Code:
#include <Arduino.h>
#include <IRremote.hpp>
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
#define I2C_ADDRESS 0x3C //Adresse OLED-Displays
#define IR_RECEIVE_PIN 6 //Pin von Arduino Uno
decode_results results; //Protocol Zwischenspeichern
SSD1306AsciiWire oled;
void setup() {
Serial.begin(9600); //9600 baud
Serial.println(strrchr(__FILE__, '\\')+1); //Dateiname in seriellen Monitor ausgeben
IrReceiver.begin(IR_RECEIVE_PIN); //Receiver start
Wire.begin();
Wire.setClock(400000L); //geht mit 10k 100k 400k
oled.begin(&Adafruit128x64, I2C_ADDRESS);
oled.setFont(fixed_bold10x15); // Auswahl der Schriftart
oled.clear(); //Löschen der aktuellen Displayanzeige
oled.println("Willkommen"); //Text in der ersten Zeile beim Startup
oled.println("Name"); // -> personalisieren
oled.println(strrchr(__FILE__, '\\')+1); //Dateiname in OLED-Display ausgeben
}
void loop() {
if (IrReceiver.decode()) { // Grab an IR code
//Ausgabe der empfangenen Daten auf seriellen Monitor
Serial.println(); // 2 blank lines between entries
Serial.println();
IrReceiver.printIRResultShort(&Serial); //Ausgabe von decodedIRData
Serial.println();
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
//Ausgabe von ausgewähltne Daten auf seriellen Monitor
Serial.print("Protocol=");
Serial.println(IrReceiver.decodedIRData.protocol); //Hier wird statt dem Protocol-Name nur eine Zahl ausgebeben
Serial.println("RawData HEX");
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); //Korrekte RawData Adresse wird ausgegeben
IrReceiver.resume(); //Prepare for the next value
}
}
Mich interessiert nur, wie ich an den Protocol Namen komme, der in meinem Sendeimpuls versteckt ist (Meinem Fall: SONY)
Gebe ich die Daten in der Funktion IrReceiver.printIRResultShort(&Serial); aus, so sehe ich den Protocolnamen als Schriftzeichen (Protocol=Sony).
Möchte ich aber nur den Protocolnamen mit Serial.println(IrReceiver.decodedIRData.protocol); ausgeben, kommt da eine Zahl raus (Protocol=19).
Es gibt eine Liste in der IRProtocol.h die folgendermaßen aussieht:
typedef enum {
UNKNOWN = 0,
PULSE_DISTANCE,
PULSE_WIDTH,
DENON,
DISH,
JVC,
LG,
LG2,
NEC,
PANASONIC,
KASEIKYO,
KASEIKYO_JVC,
KASEIKYO_DENON,
KASEIKYO_SHARP,
KASEIKYO_MITSUBISHI,
RC5,
RC6,
SAMSUNG,
SHARP,
SONY,
ONKYO,
APPLE,
BOSEWAVE,
LEGO_PF,
MAGIQUEST,
WHYNTER,
} decode_type_t;
Natürlich könnte ich da jetzt eine switch/case-Abfrage in meinem Programm implementieren. Plustert aber unnötig auf und sobald sich die Liste ändert, ist meine Abfrage falsch.
@ArminJo Ja, da gibt es eine Funktion, die sich "getProtocolString" nennt, ich weiß aber nicht, wie ich darauf Zugriff bekomme.
Ich hoffe ich konnte mein Problem diesmal besser beschreiben.