#include <LCD_I2C.h> // Import biblioteki LCD_I2C
LCD_I2C lcd(0x27, 16, 2); // Inicjalizacja obiektu lcd z adresem I2C i rozmiarem 16x2
int relay1 = 6; // Definicja pinu przekaźnika 1
int relay2 = 7; // Definicja pinu przekaźnika 2
int analogPin1 = A0; // Definicja pinu wejścia analogowego 1
int analogPin2 = A1; // Definicja pinu wejścia analogowego 2
float threshold1 = 2.5; // Inicjalizacja progu napięcia dla wejścia 1
float threshold2 = 3.0; // Inicjalizacja progu napięcia dla wejścia 2
unsigned long previousMillis = 0; // Inicjalizacja zmiennej do przechowywania poprzedniego czasu
const long interval = 5000; // Inicjalizacja stałej interwału czasowego (5 sekund)
// Definicje pinów przycisków
const int button1Pin = 8; // Definicja pinu przycisku 1
const int button2Pin = 9; // Definicja pinu przycisku 2
void setup() {
pinMode(relay1, OUTPUT); // Inicjalizacja pinu przekaźnika 1 jako wyjścia
pinMode(relay2, OUTPUT); // Inicjalizacja pinu przekaźnika 2 jako wyjścia
pinMode(button1Pin, INPUT_PULLUP); // Inicjalizacja pinu przycisku 1 jako wejścia z rezystorem podciągającym
pinMode(button2Pin, INPUT_PULLUP); // Inicjalizacja pinu przycisku 2 jako wejścia z rezystorem podciągającym
lcd.begin(); // Inicjalizacja wyświetlacza LCD
lcd.setCursor(0, 0); // Ustawienie kursora na pierwszej linii LCD
lcd.print("Nap"); // Wyświetlenie tekstu na LCD
lcd.setCursor(0, 1); // Ustawienie kursora na drugiej linii LCD
lcd.print("Th1: "); // Wyświetlenie etykiety dla progu 1
lcd.setCursor(8, 1); // Ustawienie kursora na drugiej linii LCD
lcd.print("Th2: "); // Wyświetlenie etykiety dla progu 2
lcd.backlight(); // Włączenie podświetlenia LCD
Serial.begin(9600); // Inicjalizacja komunikacji szeregowej
}
void loop() {
unsigned long currentMillis = millis(); // Odczyt aktualnego czasu w milisekundach
float voltage1 = analogRead(analogPin1) * (5.0 / 1023.0); // Odczyt napięcia z wejścia analogowego 1 i przeliczenie na wolt
float voltage2 = analogRead(analogPin2) * (5.0 / 1023.0); // Odczyt napięcia z wejścia analogowego 2 i przeliczenie na wolt
lcd.setCursor(0, 1); // Ustawienie kursora na drugiej linii LCD
lcd.print(" "); // Wyczyśczenie poprzednich wartości progu
lcd.setCursor(0, 1); // Ustawienie kursora na drugiej linii LCD
lcd.print(threshold1, 2); // Wyświetlenie aktualnego progu 1 z dwoma miejscami po przecinku
lcd.setCursor(12, 1); // Ustawienie kursora na drugiej linii LCD
lcd.print(threshold2, 2); // Wyświetlenie aktualnego progu 2 z dwoma miejscami po przecinku
// Obsługa przycisków do zmiany progów
if (digitalRead(button1Pin) == LOW) {
threshold1 += 0.1; // Zwiększenie progu 1 o 0.1
}
if (digitalRead(button2Pin) == LOW) {
threshold2 += 0.1; // Zwiększenie progu 2 o 0.1
}
// Dodatkowa obsługa przycisków do zmniejszania progów
if (digitalRead(button1Pin) == HIGH) {
threshold1 -= 0.1; // Zmniejszenie progu 1 o 0.1
}
if (digitalRead(button2Pin) == HIGH) {
threshold2 -= 0.1; // Zmniejszenie progu 2 o 0.1
}
// Sterowanie przekaźnikami na podstawie napięć i progów
if (voltage1 < threshold1) {
digitalWrite(relay1, HIGH); // Włączenie przekaźnika 1
} else {
digitalWrite(relay1, LOW); // Wyłączenie przekaźnika 1
}
if (voltage2 < threshold2) {
digitalWrite(relay2, HIGH); // Włączenie przekaźnika 2
} else {
digitalWrite(relay2, LOW); // Wyłączenie przekaźnika 2
}
// Wysyłanie napięć przez port szeregowy (do celów debugowania)
Serial.print("Napięcie 1: ");
Serial.println(voltage1, 2); // Wyświetlenie napięcia z wejścia 1 z dwoma miejscami po przecinku
Serial.print("Napięcie 2: ");
Serial.println(voltage2, 2); // Wyświetlenie napięcia z wejścia 2 z dwoma miejscami po przecinku
// Kontrola interwału czasowego
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
}
}