#include <Stepper.h>
#include <Servo.h>
// Визначте кількість кроків на оберт для вашого крокового двигуна
const int stepsPerRevolution = 200;
// Створення об'єкта Stepper
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
// Визначення сервоприводу та світлодіодного виводу
const int servoPin = 17; // Зміна номера PIN-коду вашого сервоприводу
const int trayPresentLED = 2; // Змініть номер контакту світлодіода
const int ldrPin = A1; // Підключіть контакт AO 4-контактного датчика LDR до цього аналогового контакту
Servo myServo;
void setup() {
// Налаштувати кроковий двигун
myStepper.setSpeed(50); // Встановити швидкість двигуна (відрегулювати за потреби)
// Налаштувати серводвигун
myServo.attach(servoPin);
// Встановити режими контактів для LED і LDR
pinMode(trayPresentLED, OUTPUT);
}
void loop() {
// Зчитування значення датчика LDR
int ldrValue = analogRead(ldrPin);
// Перевірте наявність лотка за допомогою датчика LDR
bool trayPresent = ldrValue < 500; // Налаштуйте порогове значення за потреби
// Керуйте світлодіодом на основі наявності лотка
digitalWrite(trayPresentLED, trayPresent ? HIGH : LOW);
// Перемістіть кроковий двигун на наступний поверх, якщо вставлено лоток
if (trayPresent) {
moveStepper(); // Перейти на наступний поверх
delay(2000); // Відрегулюйте затримку, щоб кроковий двигун досяг наступного поверху
} else {
returnServoHome(); // Поверніть сервопривід у вихідне положення, якщо лотків немає
}
}
// Функція переміщення крокового двигуна на наступний поверх
void moveStepper() {
myStepper.step(stepsPerRevolution);// Перейти на наступний поверх (1 оборот)
delay(500); // Відрегулюйте затримку, необхідну для руху крокового двигуна
}
// Функція повернення сервомотора у вихідне положення
void returnServoHome() {
myServo.write(0); // Відрегулюйте кут (0 градусів) до вашого початкового положення
delay(1000); // Відрегулюйте затримку, щоб сервопривод досяг вихідного положення
}