#include <LiquidCrystal_I2C.h> // Import biblioteki LiquidCrystal_I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inicjalizacja LCD
const int Pin = 4; // Definicja pinu dla przycisku
const int diodaPin[] = {5, 6, 7}; // Definicja pinów dla diod LED
const char* nazwaDiody[] = {"Czerwona", "Żółta", "Zielona"}; // Nazwy diod LED
const int liczbaDiod = sizeof(diodaPin) / sizeof(diodaPin[0]); // Liczba diod LED
int aktualnaDioda = 0; // Aktualna dioda LED
bool stanDiody = LOW; // Stan diody LED
unsigned long czasTrwania = 50; // Czas antydrganiowy przycisku
unsigned long ostatniCzasZmiany = 0; // Ostatni czas zmiany stanu przycisku
byte ostatniStanPrzycisku = LOW; // Ostatni stan przycisku
byte Zkropka[8] = { // 'Ż'
B11111,
B00001,
B00010,
B11111,
B01000,
B10000,
B11111,
B00000
};
byte U[8] = { // 'ó'
B01100,
B00100,
B00110,
B00100,
B01100,
B00100,
B01110,
B00000
};
byte Elka[8] = { // 'ł'
B00010,
B00100,
B01110,
B10001,
B10001,
B10001,
B01110,
B00000
};
// Inicjalizacja
void setup() {
pinMode(Pin, INPUT); // Ustawienie pinu przycisku jako wejście
for (int pin : diodaPin) { // Ustawienie pinów diod LED jako wyjścia
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW); // Wyłączenie diod LED na początku
}
lcd.init(); // Inicjalizacja LCD
lcd.backlight(); // Włączenie podświetlenia LCD
lcd.createChar(0, Zkropka);// Dodanie wzorców do LCD
lcd.createChar(1, U);
lcd.createChar(2, Elka);
}
void loop() {
if (millis() - ostatniCzasZmiany > czasTrwania) {
byte stanPrzycisku = digitalRead(Pin); // Odczytanie stanu przycisku
if (stanPrzycisku != ostatniStanPrzycisku) {
ostatniCzasZmiany = millis(); // Aktualizacja czasu ostatniej zmiany stanu
ostatniStanPrzycisku = stanPrzycisku;
if (stanPrzycisku == LOW) { // Sprawdzenie czy przycisk został naciśnięty
stanDiody = !stanDiody; // Zmiana stanu diody LED
digitalWrite(diodaPin[aktualnaDioda], stanDiody); // Sterowanie diodą LED
displayStatus(); // Wyświetlenie aktualnego stanu
if (!stanDiody) { // Jeśli dioda została wyłączona, przejdź do kolejnej diody
aktualnaDioda = (aktualnaDioda + 1) % liczbaDiod;
}
}
}
}
}
// Funkcja wyświetlająca aktualny stan na LCD
void displayStatus() {
lcd.clear(); // Wyczyszczenie ekranu LCD
lcd.setCursor(0, 0); // Ustawienie kursora na początku
if (aktualnaDioda == 1) { // Jeśli aktualna dioda to żółta, wyświetl litery 'Żó'
lcd.write(byte(0));// Wyświetlenie litery 'Ż'
lcd.write(byte(2)); // Wyświetlenie litery 'ł'
lcd.write(byte(1)); // Wyświetlenie litery 'ó'
lcd.print("ta"); // Wyświetlenie reszty słowa
} else {
lcd.print(nazwaDiody[aktualnaDioda]); // Wyświetlenie nazwy diody
}
lcd.print(stanDiody ? " ON" : " OFF"); // Wyświetlenie stanu diody LED
}