#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
/*posuvny register*/
#define latchpin 4
#define datapin 3
#define clockpin 5
uint8_t pattern=0b00000000;
uint8_t pattern1=0b00000000;
bool stav = false;
/*tlacidlo*/
const int buttonPin = 2;
int buttonState = LOW;
int lastButtonState = LOW;
long lastDebounceTime = 0;
long debounceDelay = 50;
unsigned long previousMillis = 0;
int interval = 500;
int mody=0;
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Vypnute");
pinMode(buttonPin, INPUT);
pinMode(latchpin, OUTPUT);
pinMode(datapin, OUTPUT);
pinMode(clockpin, OUTPUT);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
mody = (mody + 1) % 6;
sviet(mody);
}
}
}
lastButtonState = reading;
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
stav = !stav;
digitalWrite(latchpin, LOW);
shiftOut(datapin, clockpin, LSBFIRST, stav ? pattern : pattern1);
digitalWrite(latchpin, HIGH);
}
}
void sviet(int mody){
switch (mody){
case 0:
pattern = 0b00000000;
pattern1 = 0b00000000;
lcd.clear();
lcd.print("Vypnute");
break;
case 1:
pattern = 0b11110000;
pattern1 = 0b00001111;
interval= 500;
lcd.clear();
lcd.print("Mod 1");
break;
case 2:
pattern = 0b11001100;
pattern1 = 0b00110011;
interval= 1000;
lcd.clear();
lcd.print("Mod 2");
break;
case 3:
pattern = 0b10010010;
pattern1 = 0b01101101;
interval= 700;
lcd.clear();
lcd.print("Mod 3");
break;
case 4:
pattern = 0b00011000;
pattern1 = 0b11100111;
interval= 600;
lcd.clear();
lcd.print("Mod 4");
break;
case 5:
pattern = 0b01010101;
pattern1 = 0b10101010;
interval= 1200;
lcd.clear();
lcd.print("Mod 5");
break;
}
}