Compare commits
2
Commits
bfb2c68a45
...
89e8238b68
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
89e8238b68 | ||
|
|
6f747c4b55 |
+77
-9
@@ -23,7 +23,8 @@ LiquidCrystal_I2C lcd(0x27, 16, 2);
|
||||
|
||||
// proměnné
|
||||
// příklad je zadávané heslo, stavy, apod.
|
||||
int password = ""; // 0-9999
|
||||
int password = 0; // 0-9999
|
||||
int passwordValue = 0;
|
||||
String savedPassword = "";
|
||||
|
||||
// enkodér
|
||||
@@ -94,17 +95,88 @@ void NeutralLED() {
|
||||
void ButtonPressed() {
|
||||
if (savedPassword != "")
|
||||
{
|
||||
if (password == savedPassword) {
|
||||
if (formatCode(password) == savedPassword) {
|
||||
OpenLock();
|
||||
OpenSound();
|
||||
OpenLED();
|
||||
password = "";
|
||||
password = 0;
|
||||
}
|
||||
else {
|
||||
CloseLock();
|
||||
CloseSound();
|
||||
CloseLED();
|
||||
password = "";
|
||||
password = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// setup hesla
|
||||
void showSetupScreen(bool showValue) {
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.printstr("Nastavte heslo: ");
|
||||
lcd.setCursor(0, 1);
|
||||
if (showValue) {
|
||||
String code = formatCode(passwordValue);
|
||||
// mezery okolo pro vizuální oddělení číslic
|
||||
String display = code[0] + String(" ") + code[1] + String(" ") + code[2] + String(" ") + code[3] + String(" ");
|
||||
lcd.printstr(display.c_str());
|
||||
} else {
|
||||
lcd.printstr("* * * * ");
|
||||
}
|
||||
}
|
||||
|
||||
// setup fáze – blokující, dokud není heslo uloženo
|
||||
void runPasswordSetup() {
|
||||
NeutralLED();
|
||||
passwordValue = 0;
|
||||
masked = false;
|
||||
lastEncoderMove = millis();
|
||||
lastCLK = digitalRead(ENCODER_CLK_PIN);
|
||||
|
||||
showSetupScreen(true);
|
||||
|
||||
while (savedPassword == "") {
|
||||
// čtení enkodéru
|
||||
int currentCLK = digitalRead(ENCODER_CLK_PIN);
|
||||
if (currentCLK != lastCLK && currentCLK == LOW) {
|
||||
int dt = digitalRead(ENCODER_DT_PIN);
|
||||
if (dt != currentCLK) {
|
||||
passwordValue = (passwordValue + 1) % 10000;
|
||||
} else {
|
||||
passwordValue = (passwordValue - 1 + 10000) % 10000;
|
||||
}
|
||||
masked = false;
|
||||
lastEncoderMove = millis();
|
||||
showSetupScreen(true);
|
||||
}
|
||||
lastCLK = currentCLK;
|
||||
|
||||
// maskování po nečinnosti
|
||||
if (!masked && millis() - lastEncoderMove >= MASK_DELAY_MS) {
|
||||
masked = true;
|
||||
showSetupScreen(false);
|
||||
}
|
||||
|
||||
// potvrzení tlačítkem
|
||||
if (digitalRead(BUTTON_PIN) == HIGH) {
|
||||
savedPassword = formatCode(passwordValue);
|
||||
ConfirmSound();
|
||||
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.printstr("Heslo ulozeno! ");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.printstr("* * * * ");
|
||||
delay(1500);
|
||||
|
||||
// přechod do normálního režimu
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.printstr("Zadejte heslo: ");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.printstr(" ");
|
||||
|
||||
// debounce
|
||||
while (digitalRead(BUTTON_PIN) == HIGH) {}
|
||||
delay(50);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -207,12 +279,8 @@ void setup() {
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.printstr("NastavujiSePiny.");
|
||||
Serial.println("Nastavování pinů");
|
||||
// nastavení pinu na tlačítko
|
||||
pinMode(BUTTON_PIN, INPUT_PULLDOWN); // nezmáčknuto = 0
|
||||
Serial.println("Piny: 1/8");
|
||||
|
||||
// nastavení pinů pro RGB LED (bude přes pwm, není to nutné přes pinmode, ale lepší to udělat)
|
||||
// formátování vymyšleno přes Claude Sonnet 4.6
|
||||
// Credit: formátování vymyšleno přes Claude Sonnet 4.6
|
||||
pinMode(BUTTON_PIN, INPUT_PULLDOWN); Serial.println("Piny: 1/8");
|
||||
pinMode(RGB_RED_PIN, OUTPUT); Serial.println("Piny: 2/8");
|
||||
pinMode(RGB_GREEN_PIN, OUTPUT); Serial.println("Piny: 3/8");
|
||||
|
||||
Reference in New Issue
Block a user