#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int buttonPin = 5; // Pin podłączony do przełącznika monostabilnego
const int redLED = 2; // Pin diody czerwonej
const int yellowLED = 3; // Pin diody żółtej
const int greenLED = 4; // Pin diody zielonej
int buttonState = HIGH; // Stan aktualny przycisku
int lastButtonState = HIGH; // Poprzedni stan przycisku
unsigned long lastDebounceTime = 0; // Czas ostatniej zmiany stanu przycisku
unsigned long debounceDelay = 50; // Czas opóźnienia debouncingu
int ledState = 0; // Stan diod: 0 - OFF, 1 - RED, 2 - YELLOW, 3 - GREEN
byte polska_l[8] = { B01100,
B00100,
B00110,
B00100,
B01100,
B00100,
B01110,
B00000};
byte polska_o[8] = {B00010,
B00100,
B01110,
B10001,
B10001,
B10001,
B01110,
B00000};
byte polska_z[8] = {B00100,
B00000,
B11111,
B00010,
B00100,
B01000,
B11111,
B00000};
void setup() {
lcd.init();
lcd.backlight();
lcd.createChar(1, polska_l);
lcd.createChar(2, polska_o);
lcd.createChar(3, polska_z);
pinMode(buttonPin, INPUT);
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
}
// zabezbieczenie przed drganiami
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
changeLEDState();
}
}
}
lastButtonState = reading;
}
void changeLEDState() {
lcd.clear();
switch (ledState) {
case 0:
lcd.print("czerwona ON");
digitalWrite(redLED, HIGH);
digitalWrite(greenLED, LOW);
break;
case 1:
lcd.print("czerwona ON");
lcd.setCursor(0, 1);
lcd.write(byte(3));
lcd.write(byte(2));
lcd.write(byte(1));
lcd.print("ta ON");
digitalWrite(yellowLED, HIGH);
break;
case 2:
lcd.write(byte(3));
lcd.write(byte(2));
lcd.write(byte(1));
lcd.print("ta ON");
digitalWrite(redLED, LOW);
break;
case 3:
lcd.write(byte(3));
lcd.write(byte(2));
lcd.write(byte(1));
lcd.print("ta ON");
lcd.setCursor(0, 1);
lcd.print("zielona ON");
digitalWrite(greenLED, HIGH);
break;
case 4:
lcd.print("zielona ON");
digitalWrite(yellowLED, LOW);
break;
case 5:
lcd.print("zielona ON");
lcd.setCursor(0, 1);
lcd.print("czerwona ON");
digitalWrite(redLED, HIGH);
break;
}
ledState = (ledState + 1) % 6; // Przechodzenie do następnego stanu, cyklicznie od 0 do 5
delay(500); // Dodatkowe opóźnienie, aby uniknąć wielokrotnego naciśnięcia w jednym cyklu
}