Note
Bonjour et bienvenue dans la communauté des passionnés de SunFounder Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez au cœur de l’univers Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.
Pourquoi nous rejoindre ?
Support d’experts : Résolvez vos problèmes après-vente et surmontez vos défis techniques grâce à l’aide de notre communauté et de notre équipe.
Apprenez et Partagez : Échangez des astuces et des tutoriels pour perfectionner vos compétences.
Aperçus exclusifs : Bénéficiez d’un accès anticipé aux nouvelles annonces de produits et aux avant-premières.
Réductions spéciales : Profitez de remises exclusives sur nos produits les plus récents.
Promotions festives et concours : Participez à des concours et à des promotions spéciales.
👉 Prêt à explorer et à créer avec nous ? Cliquez sur [Ici] et rejoignez-nous dès aujourd’hui !
3.1.9 Serrure à Code
Introduction
Dans ce projet, nous utiliserons un pavé numérique (Keypad) et un écran LCD pour créer une serrure à combinaison. Le LCD affichera une invite correspondante pour que vous puissiez saisir votre mot de passe sur le pavé numérique. Si le mot de passe est correct, le message « Correct » s’affichera.
Sur la base de ce projet, nous pouvons ajouter d’autres composants électroniques, tels qu’un buzzer ou des LED, pour varier les comportements du système en fonction de l’entrée du mot de passe.
Composants
Schéma de câblage
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 |
Procédures expérimentales
Étape 1 : Construisez le circuit.
Étape 2 : Changez de répertoire.
cd ~/davinci-kit-for-raspberry-pi/c/3.1.9/
Étape 3 : Compilez.
gcc 3.1.9_PasswordLock.cpp -lwiringPi
Étape 4 : Exécutez le fichier compilé.
sudo ./a.out
Lorsque le code s’exécute, utilisez le pavé numérique pour saisir le mot de passe. Si « CORRECT » apparaît sur l’écran LCD1602, cela signifie que le mot de passe est correct ; sinon, « WRONG KEY » s’affichera.
Note
Si cela ne fonctionne pas après l’exécution, ou s’il y a un message d’erreur indiquant « wiringPi.h : Aucun fichier ou répertoire de ce type », veuillez consulter Le code C ne fonctionne pas ?.
Explication du Code
#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'};
Ici, nous définissons la longueur du mot de passe avec LENS, le tableau KEYS qui contient les valeurs des touches du clavier matriciel et le tableau password qui stocke le mot de passe correct.
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);
Voici la déclaration des sous-fonctions pour la gestion du clavier matriciel. Référez-vous à la section 2.1.5 Clavier de ce document pour plus de détails.
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[]);
Voici la déclaration des sous-fonctions pour l’écran LCD1602. Référez-vous à la section 1.1.7 I2C LCD1602 de ce document pour plus de détails.
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");
}
...
Lit la valeur de la touche pressée et la stocke dans le tableau testword. Si le nombre de valeurs saisies est supérieur à 4, la vérification du mot de passe est automatiquement déclenchée et le résultat est affiché sur l’interface LCD.
int check(){
for(int i=0;i<LENS;i++){
if(password[i]!=testword[i])
{return 0;}
}
return 1;
}
Vérifie la validité du mot de passe. Retourne 1 si le mot de passe est correct, 0 sinon.