#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 дисплей
String angle = "0";
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("<press a button>");
receiver.enableIRIn(); // Запуск ИК приемника
myservo.attach(4); // привязка линии управления к выводу 9
myservo.write(atoi(angle.c_str())); // устанвока новой позиции сервопривода
}
void loop()
{
if (receiver.decode()) //проверка новых данных
{
translateIR();
receiver.resume(); //запуск приема новой команды
}
}
//Функция вывода нового значения на индикатор
void lcdPrint(String text)
{
if (text == "C")
{
angle = "0";
myservo.write(atoi(angle.c_str())); // устанвока новой позиции сервопривода
}
else if (text == "PLAY")
{
if (atoi(angle.c_str()) >= 180)
{
myservo.write(180); // устанвока новой позиции сервопривода
}
else
{
myservo.write(atoi(angle.c_str())); // устанвока новой позиции сервопривода
}
}
else {
angle += text;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("angle:");
lcd.setCursor(0, 1);
lcd.print(angle);
}
//Функция преобразования кода в название
void translateIR()
{
switch (receiver.decodedIRData.command) {
case 168:
lcdPrint("PLAY");
break;
case 104:
lcdPrint("0");
break;
case 176:
lcdPrint("C");
break;
case 48:
lcdPrint("1");
break;
case 24:
lcdPrint("2");
break;
case 122:
lcdPrint("3");
break;
case 16:
lcdPrint("4");
break;
case 56:
lcdPrint("5");
break;
case 90:
lcdPrint("6");
break;
case 66:
lcdPrint("7");
break;
case 74:
lcdPrint("8");
break;
case 82:
lcdPrint("9");
break;
default:
lcd.clear();
lcd.print(receiver.decodedIRData.command);
lcd.print(" other button");
}
}