#include <Servo.h>
Servo servo; // Создаем объект для управления сервоприводом
int servoPin = 3; // Пин, к которому подключен сервопривод
int pumpPin = 10; // Пин, к которому подключен насос
int buttonPin = 2; // Пин, к которому подключена кнопка
int buttonState = 0; // Переменная для хранения состояния кнопки
int lastButtonState = 0; // Переменная для хранения предыдущего состояния кнопки
unsigned long lastDebounceTime = 0; // Переменная для обработки дребезга кнопки
unsigned long debounceDelay = 1; // Задержка для обработки дребезга
void setup() {
servo.attach(servoPin); // Подключаем сервопривод к соответствующему пину
pinMode(pumpPin, OUTPUT); // Устанавливаем пин для насоса как выход
pinMode(buttonPin, INPUT_PULLUP); // Устанавливаем пин для кнопки как вход с подтяжкой к питанию
Serial.begin(9600); // Инициализируем последовательный порт для монитора
}
void loop() {
int reading = digitalRead(buttonPin); // Считываем состояние кнопки
// Проверка на дребезг кнопки
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
// Если прошло время debounceDelay без изменений, считаем, что кнопка установилась в новое состояние
if ((millis() - lastDebounceTime) > debounceDelay) {
// Если состояние кнопки изменилось, сохраним его
if (reading != buttonState) {
buttonState = reading;
// Если кнопка нажата (короткое нажатие), выполним цикл работы
if (buttonState == LOW) {
// Качаем сервопривод и включаем насос
Serial.println("Button Pressed!"); // Выводим сообщение в монитор последовательного порта
for (int pos = 0; pos <= 180; pos += 1) {
servo.write(pos);
delay(1);
}
digitalWrite(pumpPin, HIGH);
delay(500);
digitalWrite(pumpPin, LOW);
for (int pos = 180; pos >= 0; pos -= 1) {
servo.write(pos);
delay(1);
}
}
}
}
// Сохраняем текущее состояние кнопки для следующего цикла
lastButtonState = reading;
}