Kódový Zámek

Popis

Tento projekt slouží jako kódový zámek. Uživatel zadá heslo pomocí klávesnice, a pokud je heslo správné, systém se odemkne. Na OLED displeji se zobrazí status "Odemknuto" nebo "Špatné heslo". Tlačítko *** vymaže zadané heslo, tlačítko #** zase potvrdí

Komponenty

Součastka Značka Použití Popis
Keypad Eduingo Mainboard Klávesnice, Pohybování v menu, Kalkulačka Keypad je tlačítková klávesnice, která se často používá pro zadávání čísel nebo kódů – podobně jako u kalkulačky. Nejčastěji má 4 řady a 3 nebo 4 sloupce (např. 4x3 = číslice 0–9, *, #).
OLED Zobrazování dat, kódové zámky, Kreslení obrázku K podsvicení používájí jednotlivé pixely.

Ukazkovy kod

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <Keypad.h>
#include <Keypad_I2C.h>

// Display
U8G2_SH1107_PIMORONI_128X128_F_HW_I2C oled(U8G2_R1, U8X8_PIN_NONE);

// Keypad
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
    {'A', 'B', 'C', 'D'},
    {'3', '6', '9', '#'},
    {'2', '5', '8', '0'},
    {'1', '4', '7', '*'}
};
byte rowPins[ROWS] = {7, 6, 5, 4};
byte colPins[COLS] = {0, 1, 2, 3};
Keypad_I2C keypad = Keypad_I2C(makeKeymap(keys), rowPins, colPins, ROWS, COLS, 0x20);

// Zámek
const String correctPassword = "1234";
String enteredPassword = "";
String statusMessage = "";
bool unlocked = false;

void setup() {
    Serial.begin(115200);
    Wire.begin(14, 15); // SDA, SCL

    oled.begin();
    oled.setFont(u8g2_font_ncenB14_tr);

    keypad.begin(makeKeymap(keys));
}

void loop() {
    char key = keypad.getKey();

    if (key) {
        Serial.print("Key: ");
        Serial.println(key);

        if (key == '#') {
            if (enteredPassword == correctPassword) {
                statusMessage = "Odemknuto";
                unlocked = true;
            } else {
                statusMessage = "Spatne heslo";
            }
            enteredPassword = "";
        }
        else if (key == '*') {
            enteredPassword = "";
            statusMessage = "Spatne heslo";
        }
        else {
            if (enteredPassword.length() < 8) {  // limituj max 8 znaků
                enteredPassword += key;
            }
            statusMessage = "";
        }
    }

    // OLED výstup
    oled.firstPage();
    do {
        // Nápis nahoře
        String title = "Zadej heslo";
        int titleX = (128 - oled.getStrWidth(title.c_str())) / 2;
        oled.setCursor(titleX, 20);
        oled.print(title);

        // Heslo uprostřed
        String displayText = enteredPassword;
        int boxWidth = 100;
        int boxHeight = 24;
        int boxX = (128 - boxWidth) / 2;
        int boxY = (128 - boxHeight) / 2;

        oled.drawFrame(boxX, boxY, boxWidth, boxHeight);

        // Text uvnitř boxu – zarovnán na střed
        int textWidth = oled.getStrWidth(displayText.c_str());
        int textX = (128 - textWidth) / 2;
        int textY = boxY + 17;  // trochu posunout dolů v boxu
        oled.setCursor(textX, textY);
        oled.print(displayText);

        // Status message (např. Odemknuto)
        if (statusMessage.length() > 0) {
            int statusX = (128 - oled.getStrWidth(statusMessage.c_str())) / 2;
            oled.setCursor(statusX, 120);
            oled.print(statusMessage);
        }

    } while (oled.nextPage());
}

Tato stránka byla naposledy upravena 2025-12-30 12:53

Běží na Wiki|Docs

This page was last edited on 2025-12-30 12:53

Eduingo
info@eduingo.com

Běží na Wiki|Docs