#include <Arduino.h>
#include <TM1637Display.h>
#include <Encoder.h>
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);
#define BUTTON1 4
#define BUTTON2 5
#define BUTTON3 6
#define BUTTON4 7
#define BUTTON5 8
#define BUTTON6 9
Encoder encoder(10, 11);
#define RELAY1 12
#define RELAY2 13
bool autoMode = false;
unsigned long lastButton3Press = 0;
int rememberedValue = 0;
bool relay1Active = false;
bool relay2Active = false;
void setup() {
pinMode(BUTTON1, INPUT_PULLUP);
pinMode(BUTTON2, INPUT_PULLUP);
pinMode(BUTTON3, INPUT_PULLUP);
pinMode(BUTTON4, INPUT_PULLUP);
pinMode(BUTTON5, INPUT_PULLUP);
pinMode(BUTTON6, INPUT_PULLUP);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
display.setBrightness(7);
display.showNumberDec(0, false, 4, 0);
}
void loop() {
autoMode = digitalRead(BUTTON6) == LOW;
if (autoMode) {
long encoderValue = encoder.read();
if (encoderValue > 9999) encoder.write(9999);
if (encoderValue < 0) encoder.write(0);
// Обновление дисплея с текущим значением счетчика
display.showNumberDec(encoderValue, false, 4, 0);
if (digitalRead(BUTTON1) == LOW) {
digitalWrite(RELAY1, HIGH);
} else {
digitalWrite(RELAY1, LOW);
}
if (digitalRead(BUTTON2) == LOW) {
if (!relay2Active) {
relay2Active = true;
int currentValue = encoder.read();
while (encoder.read() < currentValue + 10) {
// Ждем, пока показания станут на 10 больше
}
digitalWrite(RELAY2, HIGH);
delay(1000); // Задержка 1 секунда
digitalWrite(RELAY2, LOW);
relay2Active = false;
// Обновление дисплея после завершения действия
display.showNumberDec(encoder.read(), false, 4, 0);
}
}
if (digitalRead(BUTTON3) == LOW) {
if (millis() - lastButton3Press >= 2000) {
encoder.write(0);
lastButton3Press = millis();
}
}
if (digitalRead(BUTTON4) == LOW) {
rememberedValue = encoder.read();
}
if (digitalRead(BUTTON5) == LOW) {
if (!relay1Active) {
relay1Active = true;
while (encoder.read() > 0) {
// Ждем, пока показания станут равными 0
}
digitalWrite(RELAY1, HIGH);
relay1Active = false;
}
}
} else {
// Код для ручного режима
}
}