#include <IRremote.h>
#include<LiquidCrystal_I2C.h>;
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#define PIN_RECEIVER 3 // Signal Pin of IR receiver
Servo servoLR;
Servo servoUD;
IRrecv receiver(PIN_RECEIVER);
//LiquidCrystal_I2C(A4 , A5);
void setup()
{
// IRremote.init();
lcd.init(); // run the LCD secreen
lcd.backlight(); // light the secreen
lcd.begin(16, 2);
lcd.print("<press a button>");
receiver.enableIRIn(); // Start the receiver
servoLR.attach(5);
servoUD.attach(11);
servoLR.write(90); // degree
servoUD.write(0); // degree
}
void loop()
{
// Checks received an IR signal
if (receiver.decode()) {
translateIR();
receiver.resume(); // Receive the next value
}
}
void lcdPrint(char* text)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("button pressed:");
lcd.setCursor(0, 1);
lcd.print(text);
lcd.print(" code: ");
lcd.print(receiver.decodedIRData.command);
}
void translateIR()
{
// Takes command based on IR code received
switch (receiver.decodedIRData.command) {
case 162:
lcdPrint("POWER");
break;
case 226:
lcdPrint("MENU");
break;
case 34:
lcdPrint("TEST");
break;
case 2:
lcdPrint("UP");
moveServoUp();
break;
case 194:
lcdPrint("BACK");
break;
case 224:
lcdPrint("LEFT");
moveServoLeft();
break;
case 168:
lcdPrint("PLAY");
break;
case 144:
lcdPrint("RIGHT");
moveServoRight();
/* int pos = 0;
int dtwait=15;
for(pos = 0; pos < 180; pos += 1) {
servoLR.write(pos);
delay(dtwait);}
*/
break;
case 104:
lcdPrint("num: 0");
break;
case 152:
lcdPrint("DOWN");
moveServoDown();
break;
case 176:
lcdPrint("key: C");
break;
case 48:
lcdPrint("num: 1");
break;
case 24:
lcdPrint("num: 2");
break;
case 122:
lcdPrint("num: 3");
break;
case 16:
lcdPrint("num: 4");
break;
case 56:
lcdPrint("num: 5");
break;
case 90:
lcdPrint("num: 6");
break;
case 66:
lcdPrint("num: 7");
break;
case 74:
lcdPrint("num: 8");
break;
case 82:
lcdPrint("num: 9");
break;
default:
lcd.clear();
lcd.print(receiver.decodedIRData.command);
lcd.print(" other button");
}
}
void moveServoRight()
{
int newAngle = servoLR.read() + 10;
if (newAngle > 180) newAngle = 180;
servoLR.write(newAngle);
}
void moveServoLeft()
{
int newAngle = servoLR.read() - 10;
if (newAngle < 0) newAngle = 0;
servoLR.write(newAngle);
}
void moveServoUp()
{
int newAngle = servoUD.read() + 10;
if (newAngle > 180)
newAngle = 180;
servoUD.write(newAngle);
}
void moveServoDown()
{
int newAngle = servoUD.read() - 10;
if (newAngle < 0)
newAngle = 0;
servoUD.write(newAngle);
}