Hallo,
gibt es eine Möglichkeit eine Variablenangabe dynamisch zu erzeugen?
Ich habe drei unterschiedliche Werte (K_mode, K_temp, K_fspeed), die einzeln geändert werden können
und zusammen einen Wert ergeben (K_code).
Wie kann man anhand dieser Angabe das passende Array (insgesamt sind es 149 Arrays) auswählen
und an die Funktion " SendIRCode();" übergeben?
Ich möchte es nach Möglichkeit vermeiden, es mit 149 If-Abfragen zu lösen.
Es gibt doch sicherlich eine elegantere Möglichkeit...
#include <IRremote.h>
#include <avr/pgmspace.h>
IRsend irsend;
// IR-Codes
PROGMEM unsigned int Cool23A[100] = {4400,4250,550,1600,550,550,500,1650,500,1650,500,550,550,550,500,1600,550,550,600,500,500,1600,550,550,550,500,550,1600,550,1600,550,550,550,1600,550,1600,500,550,550,1600,550,1600,550,1600,550,1600,550,1600,550,1600,600,450,550,1600,550,550,500,550,550,550,500,550,550,550,550,500,600,500,550,1600,550,500,550,1600,550,550,550,500,550,550,550,500,600,1550,550,550,550,1600,550,500,550,1600,550,1600,550,1600,550,1600,550,5050};
PROGMEM unsigned int Cool24A[100] = {4400,4250,600,1600,550,500,550,1600,550,1600,550,550,500,550,550,1600,550,550,550,500,550,1600,550,550,500,550,550,1600,550,1600,550,500,550,1600,600,1550,550,550,550,1600,550,1600,500,1650,500,1600,550,1600,550,1600,600,500,550,1600,550,500,550,550,550,500,550,550,550,500,550,550,550,500,550,1600,550,550,550,500,550,550,550,500,550,550,550,550,550,1550,550,550,550,1600,550,1600,550,1600,500,1650,500,1650,500,1600,600,5050};
...
PROGMEM unsigned int Heat20L[100] = {4400,4250,600,1600,550,500,550,1600,550,1600,550,550,500,550,550,1600,550,550,550,500,550,1600,550,550,500,550,550,1600,550,1600,550,500,550,1600,600,1550,550,550,550,500,550,1600,550,1600,550,1600,550,1600,550,1600,550,500,550,1600,550,1600,550,550,500,550,550,550,500,550,550,550,550,500,550,550,500,1650,500,550,550,1600,550,1600,550,550,500,550,550,1600,550,1600,550,500,550,1600,550,550,550,500,550,1600,550,1600,550,5050};
PROGMEM unsigned int Heat21L[100] = {4400,4250,550,1600,550,550,550,1600,550,1600,550,500,550,550,550,1600,550,500,650,450,550,1600,500,550,550,550,550,1600,500,1650,500,550,550,1600,550,1600,550,500,550,550,550,1600,550,1600,550,1600,500,1650,500,1600,600,500,550,1600,550,1600,550,500,550,550,550,500,550,550,550,500,600,500,550,1600,550,1600,500,550,550,1600,550,1600,550,550,500,550,600,1550,550,550,500,550,550,1600,550,500,550,550,550,1600,550,1600,550,5050};
...
String K_mode = "Cool"; // Speichert gewählten Modus
byte K_temp = 23; // Speichert gewählte Temperatur
char K_fspeed = 'A'; // Speichert gewählte Lüftergeschwindigkeit
String K_code = K_mode + K_temp + K_fspeed;
void setup() {
Serial.begin(9600);
SendIRCode(Cool23A);
//SendIRCode(K_code);
}
void loop() {
}
void SendIRCode(unsigned int code[]) {
unsigned int irc[100] = {};
Serial.print(F("IRcode: "));
for (byte i=0; i<100; i++) {
irc[i] = pgm_read_word_near(code+i);
Serial.print(irc[i]);
if (irc[i] != 5050) { // Nach der letzten Zahl "5050" kein Komma einfügen
Serial.print(F(","));
}
}
Serial.println();
for (byte i=0; i<2; i++) { // Befehle müssen 2x gesendet werden (Comfee Klimaanlage)
irsend.sendRaw(irc,100,38); // sendRaw(unsigned int buf[], int len, int hz);
}
Serial.println(F(">> IR-Code gesendet!"));
}