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