.. 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 [|link_sf_facebook|] 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
------------
.. image:: img/list_Password_Lock.png
:align: center
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
============ ======== ======== ===
.. image:: img/Schematic_three_one9.png
:align: center
Procédures expérimentales
----------------------------
**Étape 1 :** Construisez le circuit.
.. image:: img/image262.png
:width: 800
**Étape 2 :** Changez de répertoire.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/c/3.1.9/
**Étape 3 :** Compilez.
.. raw:: html
.. code-block::
gcc 3.1.9_PasswordLock.cpp -lwiringPi
**Étape 4 :** Exécutez le fichier compilé.
.. raw:: html
.. code-block::
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 :ref:`faq_c_nowork`.
**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 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.
.. 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 la déclaration des sous-fonctions pour la gestion du clavier matriciel. Référez-vous à la section :ref:`2.1.5_keypad_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 la déclaration des sous-fonctions pour l'écran **LCD1602**. Référez-vous à la section :ref:`1.1.7_i2c_lcd` 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");
}
...
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.
.. code-block:: c
int check(){
for(int i=0;i