#include <IRremote.h>
#include <EEPROM.h>
#define pPower 2
#define pNum1 4
#define pNum2 5
#define pNum3 6
#define pNum4 8
#define pNum5 9
#define pNum6 10
#define pNum7 12
#define pNum8 13
#define pNum9 14
#define pNum0 17
#define pVolUp 7
#define pVolDn 11
#define pChUp 18
#define pChDn 16
#define PIN_RECEIVER 12 // Signal Pin of IR receiver
IRrecv receiver(PIN_RECEIVER);
int OutputLevel = 0; // 0 - 255
bool PowerStage = 1; // 0 = OFF, 1 = ON
int LastMem = 0; // saved in address 0, indicate last used mem location
int Mem1, Mem2, Mem3, Mem4, Mem5, Mem6, Mem7, Mem8, Mem9, Mem0;
void setup()
{
pinMode(10, OUTPUT); // Analog write to LED
receiver.enableIRIn(); // Start the receiver
Serial.begin(9600);
//Read EEPROM
LastMem = EEPROM.read(0); //read location of last used memory location
Mem1 = EEPROM.read(1);
Mem2 = EEPROM.read(2);
Mem3 = EEPROM.read(3);
Mem4 = EEPROM.read(4);
Mem5 = EEPROM.read(5);
Mem6 = EEPROM.read(6);
Mem7 = EEPROM.read(7);
Mem8 = EEPROM.read(8);
Mem9 = EEPROM.read(9);
Mem0 = EEPROM.read(10);
}
void loop()
{
// Checks received an IR signal
if (receiver.decode()) {
translateIR();
// OutToLED();
receiver.resume(); // Receive the next value
}
}
//void OutToLED()
//{
// Serial.println (OutputLevel);
// analogWrite(10,OutputLevel);
//}
void translateIR()
{
// Takes command based on IR code received
switch (receiver.decodedIRData.command) {
case pVolUp:
if (PowerStage == true) { // do only when Power is on
OutputLevel++;
if (OutputLevel >=255) {OutputLevel = 255;}
}
break;
case pVolDn:
if (PowerStage == true) { // do only when Power is on
OutputLevel--;
if (OutputLevel <=1) {OutputLevel = 1;}
}
break;
case pPower:
PowerStage = !PowerStage;
break;
case pNum1:
OutputLevel = 1;
break;
case pNum2:
OutputLevel = 2;
break;
case pNum3:
OutputLevel = 3;
break;
case pNum4:
OutputLevel = 4;
break;
case pNum5:
OutputLevel = 5;
break;
case pNum6:
OutputLevel = 6;
break;
case pNum7:
OutputLevel = 7;
break;
case pNum8:
OutputLevel = 8;
break;
case pNum9:
OutputLevel = 9;
break;
case pNum0:
OutputLevel = 10;
break;
}
Serial.println (OutputLevel);
if (PowerStage == true) {
analogWrite(10,OutputLevel);
} else {
analogWrite(10,0);
}
}