#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Ustawienia pinów
const int relayPin = 2; // Pin sterujący przekaźnikiem
const int buttonPin = 5; // Pin przycisku monostabilnego
const int redLEDPin = 3; // Pin czerwonej diody LED
const int greenLEDPin = 4; // Pin zielonej diody LED
// Adres I2C i rozmiary wyświetlacza LCD
const int lcdAddress = 0x27;
const int lcdCols = 16;
const int lcdRows = 2;
LiquidCrystal_I2C lcd(lcdAddress, lcdCols, lcdRows);
// Tworzenie instancji klasy PolskieZnaki
void setup() {
// Inicjalizacja pinów
pinMode(relayPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // Przycisk z wewnętrznym podciąganiem
pinMode(redLEDPin, OUTPUT);
pinMode(greenLEDPin, OUTPUT);
// Inicjalizacja wyświetlacza LCD
lcd.init();
lcd.backlight();
// Tworzenie polskich znaków na wyświetlaczu
for(int i = 0; i < polskieZnaki.count(); ++i) {
lcd.createChar(i, polskieZnaki.znak[i]);
}
// Wyświetlenie początkowego stanu na LCD z polskimi znakami
lcd.setCursor(0, 0);
String message = polskieZnaki.create("Przekaźnik wyłączony");
lcd.print(message);
}
void loop() {
// Odczyt stanu przycisku
bool buttonState = digitalRead(buttonPin);
// Sprawdzenie, czy przycisk został naciśnięty (stan LOW, bo podciągany do VCC)
if (buttonState == LOW) {
// Zmiana stanu przekaźnika
bool relayState = !digitalRead(relayPin);
digitalWrite(relayPin, relayState);
// Ustawienie stanów diod LED
digitalWrite(redLEDPin, relayState);
digitalWrite(greenLEDPin, !relayState);
// Wyświetlenie komunikatu na LCD z polskimi znakami
lcd.clear();
lcd.setCursor(0, 0);
String message = relayState ? polskieZnaki.create("Przekaźnik załączony") : polskieZnaki.create("Przekaźnik wyłączony");
lcd.print(message);
// Debouncing - opóźnienie, aby uniknąć drgań styków przycisku
delay(500);
}
}