Table des matières:

Clavier de tableau de bord avec écran LCD et Arduino Uno : 9 étapes
Clavier de tableau de bord avec écran LCD et Arduino Uno : 9 étapes

Vidéo: Clavier de tableau de bord avec écran LCD et Arduino Uno : 9 étapes

Vidéo: Clavier de tableau de bord avec écran LCD et Arduino Uno : 9 étapes
Vidéo: ARDUINO #9 : Ecran LCD [tuto en français] 2024, Juillet
Anonim
Image
Image
Clavier de tableau de bord avec écran LCD et Arduino Uno
Clavier de tableau de bord avec écran LCD et Arduino Uno
Clavier de tableau de bord avec écran LCD et Arduino Uno
Clavier de tableau de bord avec écran LCD et Arduino Uno

Il s'agit d'un clavier matriciel fonctionnant avec un écran LCD et un Arduino Uno, le plus basique qui existe aujourd'hui. Le but de cette configuration est de créer un programme qui reçoit un mot de passe tapé sur le clavier matriciel, le compare avec le mot de passe correct et affiche un message de confirmation sur l'écran.

Il est important de se rappeler que le clavier matriciel et cet écran fonctionnent avec ESP8266 et ESP32.

Comme vous pouvez le voir, nous alimentons le circuit avec l'Arduino avec un USB, puisque nous n'utilisons pas de source externe. Huit fils connectés de manière très simple aux ports de l'Arduino font la connexion de notre clavier. Ce clavier n'a pas d'alimentation et est passif, ce qui facilite grandement les connexions.

L'écran est connecté à un Arduino via l'UART, le port série, qui alimente également l'appareil.

Dans une démonstration, nous montrons dans la vidéo notre circuit vérifiant si le mot de passe tapé au clavier est correct ou non.

Dans le PDF utilisé dans la vidéo et disponible ici, nous avons le brochage complet de la puce utilisée.

Étape 1: Affichage série

Affichage série
Affichage série
Affichage série
Affichage série

C'est l'affichage série qui communique avec l'UART, qui est RS avec un TXRX. Il existe également en versions I2C, mais d'autres modèles resteront pour un assemblage à venir. Dans ce cas, cet affichage fonctionne par l'UART by RS.

Étape 2: Clavier matriciel

Clavier matriciel
Clavier matriciel

L'exemple du clavier matriciel que nous utilisons est celui de la photo, et il se trouve sur le côté droit. Nous avons un schéma qui montre comment cela fonctionne. Il n'a en fait que des lignes 4x4. Ainsi, il utilise le minimum de fils; un fil pour chaque ligne et colonne, de sorte qu'il y a huit fils au total.

Il n'a pas besoin d'alimentation car il fonctionne comme suit: lorsque le 7 est enfoncé, le clavier capte le 7 et se connecte à la ligne et à la colonne, ce qui permet l'identification en scannant l'algorithme automatiquement.

Il est important de se rappeler que tout clavier 4x4 à matrice de points fonctionnera dans cet assemblage.

Étape 3: Assemblage

Assemblée
Assemblée

Dans le schéma général, nous connectons huit fils directement aux ports de l'Arduino, car le clavier n'a pas d'alimentation. Dans l'affichage, nous avons un signal de RS 232 et une puissance positive et négative. Le rétroéclairage est toujours présent, qui est également déjà connecté (identifié par BKL).

Étape 4: Code source

Dans le code source de ce projet, vous devez inclure le numéro de série et le clavier. Il a un ensemble RX_PIN et un TX_PIN, nécessaires pour le logiciel série, ainsi que le INVERTED 1. Celui-ci a été placé en dessous pour amplifier le signal qui utilise l'entrée avec une logique inversée.

//biblioteca responsável pela comunicação com o display LCD#include //biblioteca responsável por capturar a tecla que foi pressionada no teclado #include // pino invalido apenas usado no contrutor do SoftwareSerial #define RX_PIN 255 // pino TX da nossa ligação Arduino Affichage LCD #define TX_PIN 3 // inverte a lógica dos pinos Rx e Tx, tratando LOW como HIGH e vice-versa #define INVERTED 1

Étape 5: Afficher les commandes

Afficher les commandes
Afficher les commandes

Important: dans cet affichage, il ne suffit pas de mettre une chaîne dessus. Vous devez envoyer des caractères de contrôle. Le PDF contient le lien du site où vous avez un manuel de cet affichage. Mais si vous avez un écran série d'une autre marque, il est bon de regarder leurs codes de contrôle qui s'y rapportent. Dans ce modèle, par exemple, lorsque nous envoyons un certain contrôle (informations pour cet affichage, par exemple), nous devons envoyer un préfixe, le nombre 254, pour permettre la communication.

Nous avons donc mis en place un ARRAY pour faciliter les choses, qui est une collection de variables auxquelles on accède avec un index numérique. Celui-ci sera envoyé à l'écran en tant que configuration initiale.

//comando para limpar toda a tela do displayconst char limparTela = { 254, 1}; //comandos de configuração inicial /* 254, 254 acende o backlight 254, 1 limpa a tela 254, 253, 1 configura o contrast em nível alto 254, 13 liga o cursor paraficar piscando */ const char configInicial = { 254, 254, 254, 1, 254, 253, 1, 254, 13};

Étape 6: Fonctionnement du clavier

Comment fonctionne le clavier ? Tout d'abord, il monte un tableau. Ce tableau correspond au caractère qui y sera effectivement affiché. Donc si je mets un X, quand j'appuie sur le premier bouton gauche en haut, il s'affiche. C'est le contenu du clavier, qui est ce qu'il commandera.

D'autres choses dont nous avons la définition sont la ligne numéro 4 et la colonne numéro 4, dans le cas de l'ARRAY de ce clavier. Nous avons encore des pins des lignes, qui sont les pins Arduino, et les pins de la colonne. Nous avons toujours un générateur de clavier personnalisé avec les paramètres de symbole, de broche, de ligne et de colonne.

octet const LINHAS = 4; //número de linhas do tecladoconst byte COLUNAS = 4; //número de colunas do teclado //define uma matriz com os símbolos que deseja ser lido do teclado char SIMBOLOS[LINHAS][COLUNAS] = { {'A', '1', '2', '3'}, { 'B', '4', '5', '6'}, {'C', '7', '8', '9'}, {'D', 'c', '0', 'e '} }; octet PINOS_LINHA[LINHAS] = {8, 9, 10, 11}; //pinos que indicam as linhas do teclado byte PINOS_COLUNA[COLUNAS] = {4, 5, 6, 7}; //pinos que indicam as colunas do teclado //instancia de Keypad, responsável por capturar a tecla pressionada Keypad customKeypad = Keypad(makeKeymap(SIMBOLOS), PINOS_LINHA, PINOS_COLUNA, LINHAS, COLUNAS);

Étape 7: Paramétrage du mot de passe

Dans cette partie, nous définissons le mot de passe, puis nous devons entrer un mot de passe, qui est une chaîne vide. Ci-dessous, nous mettons l'instance du softwareSerial.

//variáveis resposnsáveis por armazenar as senhasconst String SENHA_ESPERADA = "1234ABCD"; Chaîne SENHA_DIGITADA = ""; //instancia de SoftwareSerial pour nos communications avec affichage via série SoftwareSerial displaySerial = SoftwareSerial(RX_PIN, TX_PIN, INVERTED);

Étape 8: configuration

Quant au Setup, voici le displaySerial.begin (2, 400), qui concerne la vitesse. Dans notre cas, cela suffit pour envoyer un octet. Ensuite, il y a une attente de 700 millisecondes. Nous incluons le displaySerial.print (initialConfig) de la configuration initiale avec un nouveau délai de 10 millisecondes, et nous passons à la fonction de démarrage. Dans la fonction de démarrage, nous mettons displaySerial.print ("password:").

void setup(){ Serial.begin(2400); //initializando a serial de communication com o display //important o baud rate ser de 2400 displaySerial.begin(2400); //tempo de espera pela inicialização faire afficher le délai (700); //définir une configuration initiale pour afficher displaySerial.print(configInicial); retard(10); inicio(); } //função responsável por imprimir na tela a mensagem para digitar a senha //é chamada toda vez q a senha foi digitada e comparada, também quando //a tecla limpar display foi pressionada. void inicio(){ displaySerial.print("Senha:"); }

Étape 9: boucle

Dans la boucle, nous créons un customKey = customKeypad.getKey(), et dans la séquence, nous entrons une commande Switch.

//capture d'une pression de teclado car customKey = customKeypad.getKey(); //caso alguma tecla foi pressionada if (customKey){ Serial.println(customKey); switch(customKey) { /…/ } }

Commutateur de boucle Partie 1

A l'intérieur de la commande Switch: elle affiche la liste des possibilités de touches imprimables, si pressées, et incrémente le mot de passe: prend la customKey et concatène le mot de passe saisi. Ensuite, displaySerial.print (customKey) affiche le contenu de la clé.

switch(customKey) { //caso alguma das teclas imprimíveis foi pressionada case 'A': case 'B': case 'C': case 'D': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': //concatena o novo símbolo a senha que estamos digitando SENHA_DIGITADA+=customKey; Serial.println(SENHA_DIGITADA); //imprime la telle ou la pression de símbolo displaySerial.print(customKey); Pause;

Commutateur de boucle partie 2

Dans ce code, nous montrons un scénario pour si la touche CLEAR est enfoncée. Si vous tapez la lettre C et effacez la variable qui contient le mot de passe que vous tapez, il appelle la commande pour effacer l'écran et redémarre.

//caso a tecla CLEAR tenha sido pressionada case 'c': //limpa a variável que guarda a senha que está sendo digitada SENHA_DIGITADA = ""; //chama ou commande pour afficher un tel displaySerial.print(limparTela); //configurer un message pour digitar a senha inicio(); Pause;

Commutateur de boucle Partie 3

Une autre possibilité est de taper la lettre E. Dans ce cas, l'écran sera nettoyé et analysé si le mot de passe saisi est correct ou incorrect. Ensuite, nous allons donner un nouveau délai de 2 secondes, effacer l'écran, réinitialiser la variable de mot de passe et revenir au début.

//caso a tecla ENTER seja pressionada, devemos comparar as senhas case 'e': //limpa a tela displaySerial.print(limparTela); //se a senha digitada pour igual a ESPERADA if(SENHA_ESPERADA==SENHA_DIGITADA) { Serial.println("Senha Correta!"); // message d'avertissement de la senha correta displaySerial.print("Senha correta!!!"); } //caso senha esteja errada else{ Serial.println("Senha Incorreta!"); //Imprimer le message de senha incorreta displaySerial.print("Senha Incorreta!"); } // aguarda 2 segundos para limpar a tela novamente e esperar uma nova senha ser digitada delay (2000); displaySerial.print(limparTela);

Conseillé: