#include <IRremote.h>
#include <AccelStepper.h> // Бібліотека крокового двигуна
#define PIN_RECEIVER 2 // Сигнальний пін ІЧ-приймача
#define DIR_PIN 3 // Пін напрямку для крокового двигуна
#define STEP_PIN 4 // Пін кроку для крокового двигуна
#define LED_PIN_1 5 // Пін для світлодіода 1
#define LED_PIN_2 6 // Пін для світлодіода 2
#define LED_PIN_3 7 // Пін для світлодіода 3
IRrecv receiver(PIN_RECEIVER);
AccelStepper stepper(1, STEP_PIN, DIR_PIN); // 1 - тип крокового драйвера, STEP_PIN - пін кроку, DIR_PIN - пін напрямку
bool led1On = false;
void setup() {
receiver.enableIRIn(); // Включення приймача ІЧ
stepper.setMaxSpeed(1000); // Максимальна швидкість руху крокового двигуна
stepper.setAcceleration(500); // Прискорення крокового двигуна
stepper.move(2); // Переміщення двигуна на -2 кроки для ініціалізації положення
stepper.runToPosition(); // Очікування завершення переміщення
pinMode(LED_PIN_1, OUTPUT); // Пін для світлодіода 1
pinMode(LED_PIN_2, OUTPUT); // Пін для світлодіода 2
pinMode(LED_PIN_3, OUTPUT); // Пін для світлодіода 3
digitalWrite(LED_PIN_1, LOW); // Вимкнути світлодіод 1 на початку
digitalWrite(LED_PIN_2, LOW); // Вимкнути світлодіод 2 на початку
digitalWrite(LED_PIN_3, LOW); // Вимкнути світлодіод 3 на початку
}
void loop() {
if (receiver.decode()) {
translateIR();
receiver.resume(); // Продовження прийому наступного сигналу
}
}
void translateIR() {
switch(receiver.decodedIRData.command) {
case 48: // Кнопка 1 - Ввімкнути або вимкнути світлодіод 1
if (led1On) {
digitalWrite(LED_PIN_1, LOW);
led1On = false;
} else {
digitalWrite(LED_PIN_1, HIGH);
led1On = true;
}
break;
case 24: // Кнопка 2 - Увімкнути світлодіод 2 та запустити кроковий двигун в одну сторону
digitalWrite(LED_PIN_2, HIGH);
digitalWrite(LED_PIN_3, LOW);
stepper.move(1000); // Рух крокового двигуна у напрямку
stepper.runToPosition(); // Виконання руху до заданої позиції
digitalWrite(LED_PIN_2, LOW);
break;
case 122: // Кнопка 3 - Увімкнути світлодіод 3 та запустити кроковий двигун в зворотню сторону
digitalWrite(LED_PIN_2, LOW);
digitalWrite(LED_PIN_3, HIGH);
stepper.move(-1000); // Рух крокового двигуна у зворотньому напрямку
stepper.runToPosition(); // Виконання руху до заданої позиції
digitalWrite(LED_PIN_3, LOW);
break;
case 144: // Кнопка Next - Обертання крокового двигуна на 30 кроків в одну сторону
stepper.move(30);
stepper.runToPosition();
break;
case 224: // Кнопка Previous - Обертання крокового двигуна на 30 кроків у зворотню сторону
stepper.move(-30);
stepper.runToPosition();
break;
default:
break;
}
}