#include // 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; } }