Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

3.1.8 Passwortschloss

Einführung

In diesem Projekt werden wir ein Keypad und ein LCD verwenden, um ein Kombinationsschloss zu erstellen. Das LCD zeigt eine entsprechende Aufforderung an, damit Sie Ihr Passwort auf dem Keypad eingeben können. Wenn das Passwort korrekt eingegeben wird, wird „Richtig“ angezeigt.

Auf Basis dieses Projekts können wir zusätzliche elektronische Komponenten hinzufügen, wie z.B. einen Summer, LEDs usw., um unterschiedliche experimentelle Phänomene bei der Passworteingabe hinzuzufügen.

Benötigte Komponenten

Für dieses Projekt benötigen wir folgende Komponenten.

../_images/list_Password_Lock.png

Es ist definitiv praktisch, ein komplettes Kit zu kaufen. Hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENVORSTELLUNG

KAUF-LINK

GPIO-Erweiterungsplatine

BUY

Steckbrett

BUY

Jumper-Kabel

BUY

Widerstand

BUY

I2C LCD1602

BUY

Tastenfeld

-

Schaltplan

T-Board Name

physical

wiringPi

BCM

GPIO18

Pin 12

1

18

GPIO23

Pin 16

4

23

GPIO24

Pin 18

5

24

GPIO25

Pin 22

6

25

GPIO17

Pin 11

0

17

GPIO27

Pin 13

2

27

GPIO22

Pin 15

3

22

SPIMOSI

Pin 19

12

10

SDA1

Pin 3

SCL1

Pin 5

../_images/Schematic_three_one9.png

Experimentelle Verfahren

Schritt 1: Schaltung aufbauen.

../_images/image262.png

Schritt 2: Verzeichnis wechseln.

cd ~/raphael-kit/c/3.1.8/

Schritt 3: Kompilieren.

gcc 3.1.8_PasswordLock.cpp -lwiringPi

Schritt 4: Ausführen.

sudo ./a.out

Nachdem der Code ausgeführt wurde, verwenden Sie das Keypad, um das richtige Passwort: 1984 einzugeben. Wenn „RICHTIG“ auf dem LCD1602 erscheint, liegt kein Fehler beim Passwort vor; andernfalls wird „FALSCHE TASTE“ angezeigt.

Bemerkung

  • Wenn die Fehlermeldung „wiringPi.h: Datei oder Verzeichnis nicht gefunden“ angezeigt wird, beziehen Sie sich bitte auf Installieren und Überprüfen von WiringPi.

  • Wenn Sie den Fehler „Unable to open I2C device: Datei oder Verzeichnis nicht gefunden“ erhalten, müssen Sie sich auf I2C Konfiguration beziehen, um I2C zu aktivieren und zu überprüfen, ob die Verkabelung korrekt ist.

  • Wenn der Code und die Verkabelung in Ordnung sind, das LCD jedoch keinen Inhalt anzeigt, können Sie das Potentiometer auf der Rückseite drehen, um den Kontrast zu erhöhen.

Code-Erklärung

#define ROWS  4
#define COLS  4
#define BUTTON_NUM (ROWS * COLS)
#define LENS  4

unsigned char KEYS[BUTTON_NUM] {
'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'};

char password[LENS]={'1','9','8','4'};

Hier definieren wir die Länge des Passworts LENS, das Speichermatrix-Tastatur-Tastenwert-Array KEYS und das Array, das das korrekte Passwort speichert.

void keyRead(unsigned char* result);
bool keyCompare(unsigned char* a, unsigned char* b);
void keyCopy(unsigned char* a, unsigned char* b);
void keyPrint(unsigned char* a);
void keyClear(unsigned char* a);
int keyIndexOf(const char value);

Dies sind die Deklarationen der Unterfunktionen des Matrix-Tastatur-Codes. Für weitere Details siehe 2.1.8 Tastenfeld in diesem Dokument.

void write_word(int data);
void send_command(int comm);
void send_data(int data);
void lcdInit();
void clear();
void write(int x, int y, char const data[]);

Hier sind die Deklarationen der Unterfunktionen des LCD1062-Codes. Für weitere Details siehe 1.1.7 I2C LCD1602 in diesem Dokument.

while(1){
        keyRead(pressed_keys);
        bool comp = keyCompare(pressed_keys, last_key_pressed);
        ...
                testword[keyIndex]=pressed_keys[0];
                keyIndex++;
                if(keyIndex==LENS){
                    if(check()==0){
                        clear();
                        write(3, 0, "WRONG KEY!");
                        write(0, 1, "please try again");
                        }
                ...

Liest den Tastenwert und speichert ihn im Test-Array testword. Wenn die Anzahl der gespeicherten Tastenwerte mehr als 4 beträgt, wird die Richtigkeit des Passworts automatisch überprüft und die Überprüfungsergebnisse werden auf der LCD-Schnittstelle angezeigt.

int check(){
    for(int i=0;i<LENS;i++){
        if(password[i]!=testword[i])
        {return 0;}
    }
    return 1;
}

Überprüfen Sie die Richtigkeit des Passworts. Gibt 1 zurück, wenn das Passwort korrekt eingegeben wurde, und 0, wenn nicht.

Phänomen-Bild

../_images/image263.jpeg