#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Ustawienie dwóch wyświetlaczy LCD z różnymi adresami
LiquidCrystal_I2C lcd1(0x27, 20, 4); // LCD1 z adresem 0x27 (temperatura)
LiquidCrystal_I2C lcd2(0x26, 20, 4); // LCD2 z adresem 0x26 (zawory i pompy)
// Zmienna przechowująca statusy zaworów i pomp
String z3_status = "OP"; // Zawór 3-drogowy (może być "OP" lub "CL")
String z4_status = "CL"; // Zawór 4-drogowy (może być "OP" lub "CL")
String p1_status = "ON"; // Pompa 1 (może być "ON" lub "OFF")
String p2_status = "OFF"; // Pompa 2 (może być "ON" lub "OFF")
// Przypisanie czujników
float temp1 = 20.0; // Czujnik Pieca
float temp2 = 15.0; // Czujnik Powrotu
float temp3 = 25.0; // Czujnik C.W.U
float temp4 = 30.0; // Czujnik Buforu
unsigned long lastUpdate = 0; // Zmienna do śledzenia czasu aktualizacji
void setup() {
// Inicjalizacja wyświetlaczy LCD
lcd1.begin(20, 4); // LCD1 (20 kolumn, 4 wiersze)
lcd2.begin(20, 4); // LCD2 (20 kolumn, 4 wiersze)
lcd1.setBacklight(LOW); // Wyłączenie podświetlenia na początku
lcd2.setBacklight(LOW); // Wyłączenie podświetlenia na początku
delay(2000); // Czekaj 2 sekundy na uruchomienie
// Wyświetlanie informacji o temperaturach na LCD1
lcd1.clear(); // Czyszczenie wyświetlacza
lcd1.setCursor(0, 0); // Pierwsza linia
lcd1.print("C.O. IN = ");
lcd1.print(temp1, 1); // Wyświetlanie temperatury z jednym miejscem po przecinku
lcd1.setCursor(0, 1); // Druga linia
lcd1.print("C.O. OUT = ");
lcd1.print(temp2, 1); // Wyświetlanie temperatury z jednym miejscem po przecinku
lcd1.setCursor(0, 2); // Trzecia linia
lcd1.print("C.W.U = ");
lcd1.print(temp3, 1); // Wyświetlanie temperatury z jednym miejscem po przecinku
lcd1.setCursor(0, 3); // Czwarta linia
lcd1.print("Bufor = ");
lcd1.print(temp4, 1); // Wyświetlanie temperatury z jednym miejscem po przecinku
delay(3000); // Czekaj 3 sekundy na wyświetlenie temperatur
updateStatus(); // Wyświetl status zaworów i pomp na LCD2
}
void loop() {
unsigned long currentMillis = millis();
// Co sekundę aktualizujemy dane na wyświetlaczach
if (currentMillis - lastUpdate >= 1000) { // Sprawdzamy, czy minęła jedna sekunda
lastUpdate = currentMillis;
// Wyświetlanie statusu pomp
lcd2.clear(); // Czyszczenie wyświetlacza
lcd2.setCursor(0, 0);
lcd2.print("Z3 = ");
lcd2.print(z3_status);
lcd2.setCursor(0, 1);
lcd2.print("Z4 = ");
lcd2.print(z4_status);
lcd2.setCursor(0, 2);
lcd2.print("P1 = ");
lcd2.print(p1_status);
lcd2.setCursor(0, 3);
lcd2.print("P2 = ");
lcd2.print(p2_status);
updateDisplays(); // Aktualizacja wyświetlaczy
}
}
void updateDisplays() {
// Wyświetlanie temperatur na LCD1
lcd1.clear(); // Czyszczenie wyświetlacza
lcd1.setCursor(0, 0);
lcd1.print("C.O. IN = ");
lcd1.print(temp1, 1);
lcd1.setCursor(0, 1);
lcd1.print("C.O. OUT = ");
lcd1.print(temp2, 1);
lcd1.setCursor(0, 2);
lcd1.print("C.W.U = ");
lcd1.print(temp3, 1);
lcd1.setCursor(0, 3);
lcd1.print("Bufor = ");
lcd1.print(temp4, 1);
}