byte relayPin[] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
byte irPin = 2;
byte relay;
byte relays = sizeof(relayPin) / sizeof(relayPin[0]);
void setup() {
Serial.begin(115200);
pinMode(irPin, INPUT);
for (int i = 0; i < relays; i++) {
pinMode(relayPin[i], OUTPUT);
}
}
void loop() {
unsigned long key = getIrKey();
switch (key) {
case 26768: relay = 7; break; // 0
case 12488: relay = 8; break; // 1
case 6368: relay = 9; break; // 2
case 31358: relay = 10; break; // 3
case 4328: relay = 11; break; // 4
case 14528: relay = 12; break; // 5
case 23198: relay = 13; break; // 6
case 17078: relay = 14; break; // 7
case 19118: relay = 15; break; // 8
case 21158: relay = 16; break; // 9
case 23978: relay = 6; break; // power
// case 7658: relay = 17; break; // menu
// case 8918: relay = 18; break; // test
case 758: relay = 5; break; // +
case 15818: relay = 4; break; // back
case 8168: relay = 3; break; // rew
case 22448: relay = 2; break; // play
case 28568: relay = 1; break; // fwd
case 26528: relay = 0; break; // -
case 20408: // "C" clear
for (int i = 0; i < relays; i++)
digitalWrite(relayPin[i], LOW); // make it low
key = 0; // do not toggle pin
break;
default: key = 0; break; // do not toggle pin
}
if (key) {
if (key < 10000) Serial.print(" ");
if (key < 1000) Serial.print(" ");
Serial.print(key);
Serial.print(" ");
if (relay < 10) Serial.print(" ");
Serial.print(relay);
Serial.print(" ");
if (relayPin[relay] < 10) Serial.print(" ");
Serial.print(relayPin[relay]);
Serial.print(" ");
Serial.println(digitalRead(relayPin[relay]));
digitalWrite(relayPin[relay], !digitalRead(relayPin[relay]));
}
}
int getIrKey() {
int key = 0, temp;
int len = pulseIn(irPin, LOW);
if (len > 3500) {
for (int i = 1; i <= 32; i++) {
temp = pulseIn(irPin, HIGH);
if (temp > 1000)
key = key + (1 << (i - 17));
}
}
if (key < 0 )
key = -key;
return key;
}