#include <IRremote.h>
#include <Servo.h>
const int IR_RECEIVE_PIN = 2; // Пин для ИК-приёмника
Servo servo1; // Создаём объект сервопривода
int angle = 90; // Начальный угол сервопривода
int step = 1; // Шаг изменения угла
int currentCommand = 0; // Текущая команда (код кнопки)
void setup() {
Serial.begin(9600); // Настройка скорости передачи данных
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Инициализация ИК-приёмника
servo1.attach(11); // Привязываем сервопривод к пину 11
servo1.write(angle); // Устанавливаем начальный угол
Serial.println("IR Receiver and Servo are ready!");
}
void loop() {
if (IrReceiver.decode()) { // Проверяем, получены ли данные
Serial.print("Received value: 0x");
Serial.println(IrReceiver.decodedIRData.command, HEX);
// Запоминаем текущую команду
currentCommand = IrReceiver.decodedIRData.command;
IrReceiver.resume(); // Готовим приёмник к следующему сигналу
}
// Выполнение действия в зависимости от команды
switch (currentCommand) {
case 0x18: // Код кнопки "1" - поворот влево
angle -= step; // Уменьшаем угол
if (angle < 0) angle = 0; // Ограничиваем угол
break;
case 0x68: // Код кнопки "2" - поворот вправо
angle += step; // Увеличиваем угол
if (angle > 180) angle = 180; // Ограничиваем угол
break;
case 0x30: // Код кнопки "0" - остановка
// Сбрасываем текущую команду (чтобы остановить движение)
currentCommand = 0;
break;
default:
// Неизвестная команда, ничего не делаем
break;
}
// Плавное обновление сервопривода
servo1.write(angle);
delay(20); // Задержка для плавности
}