#include <IRremote.h>
#include <LiquidCrystal.h>
#include <Servo.h>
Servo myservo;
const int PIN_RECEIVER = 2; // Вход для ИК приемника
IRrecv receiver(PIN_RECEIVER); // приемник иК
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); // LCD дисплей
int degree = 0;
void setup()
{
myservo.attach(3);
lcd.begin(16, 2);
lcd.print("<press a button>");
receiver.enableIRIn(); // Запуск ИК приемника
}
void loop()
{
if (receiver.decode()) //проверка новых данных
{
translateIR();
receiver.resume(); //запуск приема новой команды
}
}
//Функция вывода нового значения на индикатор
void lcdPrint(int degree)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Angle, degrees:");
lcd.setCursor(0, 1);
lcd.print(degree);
}
//Функция преобразования кода в название
void translateIR()
{
switch (receiver.decodedIRData.command) {
case 168: //play
myservo.write(degree);
break;
case 104:
if(degree>0){
degree = degree*10;
}
break;
case 176:
degree = 0;
lcd.clear();
break;
case 48:
if(degree>0){
degree = degree*10+1;
} else {degree = 1;}
break;
case 24:
if(degree>0){
degree = degree*10+2;
} else {degree = 2;}
break;
case 122:
if(degree>0){
degree = degree*10+3;
} else {degree = 3;}
break;
case 16:
if(degree>0){
degree = degree*10+4;
} else {degree = 4;}
break;
case 56:
if(degree>0){
degree = degree*10+5;
} else {degree = 5;}
break;
case 90:
if(degree>0){
degree = degree*10+6;
} else {degree = 6;}
break;
case 66:
if(degree>0){
degree = degree*10+7;
} else {degree = 7;}
break;
case 74:
if(degree>0){
degree = degree*10+8;
} else {degree = 8;}
break;
case 82:
if(degree>0){
degree = degree*10+9;
} else {degree = 9;}
break;
default:
break;
}
if(degree>180){
degree = 0;
}
lcdPrint(degree);
}