#include <Servo.h> //подключение библиотеки
#include <IRremote.h>
#include <LiquidCrystal_I2C.h>
const int PIN_RECEIVER = 8; // Вход для ИК приемника
IRrecv receiver(PIN_RECEIVER); // приемник иК
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
Servo servo;
int angle = 0;
int index = 0;
void setup()
{
Serial.begin(9600);
receiver.enableIRIn(); // Запуск ИК приемника
servo.attach(9);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" Enter angle");
lcd.setCursor(0, 1);
lcd.print(" from 0 to 180");
}
void loop()
{
if (receiver.decode()) //проверка новых данных
{
SetAngle();
receiver.resume(); //запуск приема новой команды
}
}
void UpdateAngle(int num)
{
switch (num){
case -1:
angle = 0;
index = 0;
break;
case 0:
angle *= 10;
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
if(index == 1){
angle = num;
}
else {
angle *= 10;
angle += num;
}
break;
case 10:
if(angle <= 180){
servo.write(angle);
}
else{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Angle should be");
lcd.setCursor(0, 1);
lcd.print("less than 180!");
delay(3000);
}
angle = 0;
index = 0;
default:
break;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ToTurnPress PLAY");
lcd.setCursor(0, 1);
lcd.print("Angle: ");
lcd.print(angle);
}
void SetAngle()
{
index++;
switch (receiver.decodedIRData.command) {
case 168: // PLAY
UpdateAngle(10);
break;
case 176: // Cancel
UpdateAngle(-1);
break;
case 104:
UpdateAngle(0);
break;
case 48:
UpdateAngle(1);
break;
case 24:
UpdateAngle(2);
break;
case 122:
UpdateAngle(3);
break;
case 16:
UpdateAngle(4);
break;
case 56:
UpdateAngle(5);
break;
case 90:
UpdateAngle(6);
break;
case 66:
UpdateAngle(7);
break;
case 74:
UpdateAngle(8);
break;
case 82:
UpdateAngle(9);
break;
default:
break;
}
}