#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
const int rele_1 = 3;
const int rele_2 = 4;
const int rele_3 = 5;
const int rele_4 = 6;
const int switch_1 = 2;
int releState1 = LOW;
int releState2 = LOW;
int releState3 = LOW;
int releState4 = LOW;
int lastSwitchState = HIGH; // Следи предишното състояние на ключа
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("R1 R2 R3 R4");
pinMode(rele_1, OUTPUT);
pinMode(rele_2, OUTPUT);
pinMode(rele_3, OUTPUT);
pinMode(rele_4, OUTPUT);
pinMode(switch_1, INPUT_PULLUP);
// Започваме с релетата изключени
digitalWrite(rele_1, releState1);
digitalWrite(rele_2, releState2);
digitalWrite(rele_3, releState3);
digitalWrite(rele_4, releState4);
}
void loop() {
int on_off = digitalRead(switch_1); // Четем текущото състояние на ключа
// Променяме състоянието на релетата само ако ключът е променен
if (on_off != lastSwitchState) {
if (on_off == LOW) {
// Ключът е включен (LOW), изпълняваме зададената логика
// 1. Изключваме rele_3 и rele_4 заедно
digitalWrite(rele_3, LOW);
digitalWrite(rele_4, LOW);
delay(500);
// 2. Изключваме rele_2 и rele_1 заедно
digitalWrite(rele_2, LOW);
digitalWrite(rele_1, LOW);
delay(500);
// 3. Включваме отново rele_3 и rele_4 заедно
digitalWrite(rele_3, HIGH);
digitalWrite(rele_4, HIGH);
}
else if (on_off == HIGH) {
// Ключът е изключен (HIGH), изпълняваме зададената логика
// 1. Изключваме всички релета
digitalWrite(rele_1, LOW);
digitalWrite(rele_2, LOW);
digitalWrite(rele_3, LOW);
digitalWrite(rele_4, LOW);
delay(500);
// 2. Включваме rele_1 и rele_2 заедно
digitalWrite(rele_1, HIGH);
digitalWrite(rele_2, HIGH);
delay(500);
// 3. Включваме rele_3 и rele_4 заедно
digitalWrite(rele_3, HIGH);
digitalWrite(rele_4, HIGH);
}
// Актуализираме предишното състояние на ключа
lastSwitchState = on_off;
}
// Извеждаме състоянието на релетата на серийния монитор
/* Serial.print("Rele 1: ");
Serial.print(digitalRead(rele_1));
Serial.print(" | Rele 2: ");
Serial.print(digitalRead(rele_2));
Serial.print(" | Rele 3: ");
Serial.print(digitalRead(rele_3));
Serial.print(" | Rele 4: ");
Serial.println(digitalRead(rele_4));*/
//delay(50); // Малко забавяне за плавна работа
// lcd.clear();
// lcd.setCursor(1, 0);
//lcd.print("R1 R2 R3 R4");
lcd.setCursor(0, 1);
if (digitalRead(rele_1) == HIGH){
lcd.print("ON ");
}
else{
lcd.print("OFF");
}
lcd.setCursor(5, 1);
if (digitalRead(rele_2) == HIGH){
lcd.print("ON ");
}
else{
lcd.print("OFF");
}
lcd.setCursor(9, 1);
if (digitalRead(rele_3) == HIGH){
lcd.print("ON ");
}
else{
lcd.print("OFF");
}
lcd.setCursor(13, 1);
if (digitalRead(rele_4) == HIGH){
lcd.print("ON ");
}
else{
lcd.print("OFF");
}
delay(10);
}