.. note::
Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l'univers des Raspberry Pi, Arduino et ESP32 avec d'autres passionnés.
**Pourquoi rejoindre ?**
- **Support d'experts** : Résolvez les problèmes après-vente et les défis techniques avec l'aide de notre communauté et de notre équipe.
- **Apprendre et partager** : Échangez des astuces et des tutoriels pour améliorer vos compétences.
- **Aperçus exclusifs** : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.
- **Réductions spéciales** : Profitez de réductions exclusives sur nos produits les plus récents.
- **Promotions festives et cadeaux** : Participez à des cadeaux et des promotions de vacances.
👉 Prêt à explorer et à créer avec nous ? Cliquez [|link_sf_facebook|] et rejoignez-nous aujourd'hui !
.. _3.1.8_c_pi5:
3.1.8 Verrou à Mot de Passe
========================================
Introduction
---------------
Dans ce projet, nous allons utiliser un clavier et un écran LCD pour créer un verrou à combinaison. Le LCD affichera une invite correspondante pour que vous puissiez taper votre mot de passe sur le clavier. Si le mot de passe est correctement saisi, “Correct” sera affiché.
Sur la base de ce projet, nous pouvons ajouter des composants électroniques supplémentaires, tels que buzzer, LED, etc., pour ajouter différents phénomènes expérimentaux lors de la saisie du mot de passe.
Composants nécessaires
------------------------------
Dans ce projet, nous avons besoin des composants suivants.
.. image:: ../img/list_Password_Lock.png
:align: center
Il est très pratique d'acheter un kit complet, voici le lien :
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nom
- ÉLÉMENTS DANS CE KIT
- LIEN
* - Kit Raphael
- 337
- |link_Raphael_kit|
Vous pouvez également les acheter séparément via les liens ci-dessous.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUCTION DU COMPOSANT
- LIEN D'ACHAT
* - :ref:`cpn_gpio_extension_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_i2c_lcd`
- |link_i2clcd1602_buy|
* - :ref:`cpn_keypad`
- \-
Schéma de câblage
------------------
============ ======== ======== ===
Nom T-Board physique 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
============ ======== ======== ===
.. image:: ../img/Schematic_three_one9.png
:align: center
Procédures expérimentales
-------------------------
**Étape 1 :** Construisez le circuit.
.. image:: ../img/image262.png
**Étape 2 :** Changez de répertoire.
.. raw:: html
.. code-block::
cd ~/raphael-kit/c/3.1.8/
**Étape 3 :** Compilez.
.. raw:: html
.. code-block::
gcc 3.1.8_PasswordLock.cpp -lwiringPi
**Étape 4 :** Exécutez.
.. raw:: html
.. code-block::
sudo ./a.out
Après l'exécution du code, utilisez le clavier pour entrer le mot de passe correct : 1984.
Si “CORRECT” apparaît sur le LCD1602, le mot de passe est correct ; sinon, “WRONG KEY” apparaîtra.
.. note::
* Si un message d'erreur ``wiringPi.h: No such file or directory`` apparaît, veuillez vous référer à :ref:`install_wiringpi_pi5`.
* Si vous recevez l'erreur ``Unable to open I2C device: No such file or directory``, vous devez vous référer à :ref:`i2c_config` pour activer I2C et vérifier si le câblage est correct.
* Si le code et le câblage sont corrects mais que l'écran LCD n'affiche toujours rien, vous pouvez ajuster le potentiomètre à l'arrière pour augmenter le contraste.
**Explication du code**
.. code-block:: c
#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 LENS, le tableau des valeurs des touches du
clavier KEYS et le tableau qui stocke le mot de passe correct.
.. code-block:: c
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 une déclaration des sous-fonctions du code du clavier matriciel, consultez :ref:`2.1.8_c_pi5`
de ce document pour plus de détails.
.. code-block:: c
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 une déclaration des sous-fonctions du code LCD1062, consultez :ref:`1.1.7_c_pi5` de ce document pour plus de détails.
.. code-block:: c
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");
}
...
Lisez la valeur de la touche et stockez-la dans le tableau testword. Si le nombre de valeurs
de touches stockées est supérieur à 4, la correction du mot de passe est automatiquement vérifiée,
et les résultats de la vérification sont affichés sur l'écran LCD.
.. code-block:: c
int check(){
for(int i=0;i