#include <LiquidCrystal.h>
// Inicjalizacja obiektu LiquidCrystal z interfejsem w postaci numerów pinów
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Inicjalizacja numerów pinów dla diod
const int redLed = 10; // czerwona dioda LED
const int yellowLed = 9; // żółta dioda LED
const int greenLed = 8; // zielona dioda LED
const int buttonPin = 7; // przełącznik monostabilny
// Inicjalizacja potrzebnych zmiennych
int buttonState = LOW; // Zmienna przechowująca stan przełącznika
int lastButtonState = LOW; // Zmienna przechowująca ostatni stan przełącznika
unsigned long lastDebounceTime = 0; // Zmienna przechowująca czas ostatniego odbicia
unsigned long debounceDelay = 20; // Opóźnienie odbicia w milisekundach
int ledState = 0; // Zmienna przechowująca stan diod
//przygotowanie tablicy bitów dla polskich znaków specjalnych
byte polishChars[][8] = {
{B11111, B00001, B00010, B11111, B01000, B10000, B11111, B00000}, // Ż
{B00010, B00100, B01110, B10001, B10001, B10001, B01110, B00000}, // ó
{B01100, B00100, B00110, B00100, B01100, B00100, B01110, B00000} // ł
};
void setup() {
lcd.begin(16, 2); // Ustawienie liczby kolumn i wierszy wyświetlacza
// Dodanie polskich znaków do pamięci LCD
for (int i = 0; i < sizeof(polishChars) / sizeof(polishChars[0]); i++) {
lcd.createChar(i, polishChars[i]);
}
pinMode(redLed, OUTPUT); // Ustawienie pinu czerwonej diody LED jako wyjście
pinMode(yellowLed, OUTPUT); // Ustawienie pinu żółtej diody LED jako wyjście
pinMode(greenLed, OUTPUT); // Ustawienie pinu zielonej diody LED jako wyjście
pinMode(buttonPin, INPUT); // Ustawienie pinu przełącznika jako wejście
}
void loop() {
// Odczytanie stanu przełącznika
int reading = digitalRead(buttonPin);
// Jeśli stan przełącznika się zmienił, zresetuj licznik odbicia
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
// Jeśli stan przełącznika jest stabilny przez okres dłuższy niż opóźnienie odbicia, to jest to prawdziwy stan przełącznika
if ((millis() - lastDebounceTime) > debounceDelay) {
// Jeśli stan przełącznika się zmienił
if (reading != buttonState) {
buttonState = reading;
// Jeśli nowy stan przełącznika to HIGH, zmień stan diod
if (buttonState == HIGH) {
switch (ledState) {
case 0:
digitalWrite(redLed, HIGH); // Załączenie diody czerwonej
lcd.clear(); // Czyszczenie ekranu
lcd.print("Czerwona ON"); // Wyświetlenie komunikatu
ledState = 1; // Przejście do kolejnego stanu
break;
case 1:
digitalWrite(redLed, LOW); // Wyłączenie diody czerwonej
lcd.clear(); // Czyszczenie ekranu
lcd.print("Czerwona OFF"); // Wyświetlenie komunikatu
ledState = 2; // Przejście do kolejnego stanu
break;
case 2:
digitalWrite(yellowLed, HIGH); // Załączenie diody żółtej
lcd.clear(); // Czyszczenie ekranu
lcd.write(byte(0)); // Wyświetlanie "Ż"
lcd.write(byte(1)); // Wyświetlanie "ó"
lcd.write(byte(2)); // Wyświetlanie "ł"
lcd.print("ta ON"); // Wyświetlenie reszty komunikatu
ledState = 3; // Przejście do kolejnego stanu
break;
case 3:
digitalWrite(yellowLed, LOW); // Wyłączenie diody żółtej
lcd.clear(); // Czyszczenie ekranu
lcd.write(byte(0)); // Wyświetlanie "Ż"
lcd.write(byte(1)); // Wyświetlanie "ó"
lcd.write(byte(2)); // Wyświetlanie "ł"
lcd.print("ta OFF"); // Wyświetlenie reszty komunikatu
ledState = 4; // Przejście do kolejnego stanu
break;
case 4:
digitalWrite(greenLed, HIGH); // Załączenie diody zielonej
lcd.clear(); // Czyszczenie ekranu
lcd.print("Zielona ON"); // Wyświetlenie komunikatu
ledState = 5; // Przejście do pierwszego stanu
break;
case 5:
digitalWrite(greenLed, LOW); // Wyłączenie diody zielonej
lcd.clear(); // Czyszczenie ekranu
lcd.print("Zielona OFF"); // Wyświetlenie komunikatu
ledState = 0; // Przejście do pierwszego stanu
break;
}
}
}
}
// Zapamiętaj ostatni stan przełącznika
lastButtonState = reading;
}