Nota

Ciao, benvenuto nella Community su Facebook per gli appassionati di SunFounder Raspberry Pi, Arduino e ESP32! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra community e del nostro team.

  • Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato agli annunci dei nuovi prodotti e anteprime esclusive.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e Giveaway Festivi: Partecipa a concorsi e promozioni in occasione delle festività.

👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

3.1.9 Serratura a Codice

Introduzione

In questo progetto, utilizzeremo una tastiera e un LCD per realizzare una serratura a combinazione. L’LCD mostrerà un messaggio che invita a inserire la password sulla tastiera. Se la password è corretta, verrà visualizzato "CORRETTO".

Su questa base, possiamo aggiungere componenti elettronici come cicalini o LED per ottenere diversi segnali visivi o sonori in base alla correttezza della password.

Componenti

../_images/list_Password_Lock1.png

Schema di Collegamento

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_one91.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/image2621.png

Passo 2: Cambia directory.

cd ~/davinci-kit-for-raspberry-pi/c/3.1.9/

Passo 3: Compila.

gcc 3.1.9_PasswordLock.cpp -lwiringPi

Passo 4: Esegui.

sudo ./a.out

Quando il codice è in esecuzione, si utilizza la tastiera per inserire la password. Se appare "CORRETTO" su LCD1602, la password è corretta; altrimenti, comparirà "CHIAVE ERRATA".

Nota

Se non funziona dopo l’esecuzione o compare un messaggio di errore: "wiringPi.h: No such file or directory", consulta Il codice C non funziona?.

Spiegazione del Codice

#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'};

Qui definiamo la lunghezza della password LENS, l’array KEYS per i valori dei tasti della tastiera e l’array password che contiene la password corretta.

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);

Dichiarazione delle sottofunzioni per la gestione della tastiera a matrice. Per ulteriori dettagli, consulta 2.1.5 Tastiera di questo documento.

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[]);

Dichiarazione delle sottofunzioni per il codice LCD1602. Per maggiori dettagli, consulta 1.1.7 LCD1602 I2C di questo documento.

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");
                        }
                ...

Legge il valore del tasto e lo memorizza nell’array testword. Se sono stati memorizzati più di 4 valori, il codice verifica automaticamente la correttezza della password e mostra il risultato sul display LCD.

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

Verifica la correttezza della password. Se la password è corretta, restituisce 1; altrimenti, restituisce 0.