Nota
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirti?
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 suggerimenti e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime.
Sconti speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e omaggi: Partecipa a concorsi e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi!
3.1.8 Serratura a combinazione
Introduzione
In questo progetto, utilizzeremo una tastiera e un LCD per creare una serratura a combinazione. L’LCD visualizzerà un messaggio che ti inviterà a digitare la tua password sulla tastiera. Se la password viene inserita correttamente, verrà visualizzato «CORRECT».
Sulla base di questo progetto, possiamo aggiungere ulteriori componenti elettronici, come cicalini, LED e così via, per creare diversi effetti sperimentali durante l’inserimento della password.
Componenti necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Raphael |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE COMPONENTE |
LINK PER L’ACQUISTO |
|---|---|
- |
Schema elettrico
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 |
Procedure sperimentali
Passo 1: Costruisci il circuito.
Passo 2: Vai alla cartella del codice.
cd ~/raphael-kit/c/3.1.8/
Passo 3: Compila.
gcc 3.1.8_PasswordLock.cpp -lwiringPi
Passo 4: Esegui.
sudo ./a.out
Quando il codice viene eseguito, usa la tastiera per inserire la password corretta: 1984. Se su LCD1602 compare «CORRECT», la password è stata inserita correttamente; in caso contrario, comparirà «WRONG KEY».
Nota
Se compare il messaggio di errore
wiringPi.h: No such file or directory, consulta Installazione e verifica di WiringPi.Se compare l’errore
Unable to open I2C device: No such file or directory, consulta Configurazione I²C per abilitare I2C e controllare se il cablaggio è corretto.Se il codice e il cablaggio sono corretti ma l’LCD non visualizza alcun contenuto, puoi regolare il potenziometro sul retro per aumentare il contrasto.
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, una matrice KEYS con i valori dei tasti della tastiera, e un array che memorizza 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);
Questa è la dichiarazione delle sottofunzioni del codice per la tastiera a matrice, fai riferimento a 2.1.8 Tastierino di questo documento per maggiori dettagli.
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[]);
Questa è la dichiarazione delle sottofunzioni del codice LCD1062, fai riferimento a 1.1.7 I2C LCD1602 di questo documento per maggiori dettagli.
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 dei tasti e lo memorizza nell’array di test testword. Se il numero di valori dei tasti memorizzati supera i 4, viene automaticamente verificata la correttezza della password e i risultati della verifica vengono visualizzati sull’interfaccia LCD.
int check(){
for(int i=0;i<LENS;i++){
if(password[i]!=testword[i])
{return 0;}
}
return 1;
}
Verifica la correttezza della password. Restituisce 1 se la password è corretta e 0 se non lo è.
Immagine del fenomeno