带LCD显示屏和Arduino Uno的仪表板键盘的制作

电子说

1.3w人已加入

描述

步骤1:串行显示

这是与UART,它是带有TXRX的RS。它也存在于I2C版本中,但其他型号将保留用于即将到来的组装。在这种情况下,该显示由UART通过RS工作。

步骤2:矩阵键盘

Arduino

矩阵示例我们使用的键盘是照片的键盘,它在右侧。我们有一个显示其工作原理的图表。它实际上只有4x4线。因此,它使用的导线数量最少。每行和每列一根导线,因此总共有八根导线。

它不需要电源,因为它的工作方式如下:按下7时,键盘拿起7并连接

请记住,点矩阵的任何4x4键盘都可以在该程序集中使用。

步骤3:组装

Arduino

在一般方案中,由于键盘没有电源,我们将八根电线直接连接到Arduino的端口。在显示屏上,我们有一个RS 232信号以及正负电源。背光仍然存在,并且已经连接(由BKL标识)。

步骤4:源代码

在该项目的源代码中,则必须包括串行和键盘。它具有串行软件必需的设置RX_PIN和TX_PIN,以及INVERTED1。它位于下面,用于放大使用反相逻辑输入的信号。

//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 x Display LCD

#define TX_PIN 3

// inverte a lógica dos pinos Rx e Tx, tratando LOW como HIGH e vice-versa

#define INVERTED 1

第5步:显示命令

重要信息:在此显示中,仅在其上放置一个字符串是不够的。您需要发送控制字符。 PDF包含您具有该显示手册的站点的链接。但是,如果您有其他品牌的串行显示器,则最好查看它们与此有关的控制代码。例如,在此模型中,当我们发送某个控件(例如有关此显示的信息)时,我们需要发送一个前缀254,以启用通信。

因此我们设置了一个方便事物的数组,它是使用数字索引访问的变量的集合。

//comando para limpar toda a tela do display

const char limparTela[ ] = {

254,1};

//comandos de configuração inicial

/*

254,254 --》 acende o backlight

254,1 --》 limpa a tela

254,253,1 --》 configura o contraste em nível alto

254,13 --》 liga o cursor paraficar piscando

*/

const char configInicial[ ] = {

254,254, 254,1, 254,253,1, 254,13};

步骤6:键盘操作

键盘如何工作?首先,它安装一个数组。该数组具有将实际显示在其中的字符。因此,如果我放了一个X,当我按下顶部的第一个左按钮时,它就会显示出来。这就是键盘的内容,它就是命令的内容。

在此键盘的阵列中,我们要定义的其他内容是行号4和列号4。我们仍然有线路的引脚,即Arduino引脚和列的引脚。我们仍然有一个带有符号,引脚,行和列参数的customKeypad键盘构建器。

const byte LINHAS = 4; //número de linhas do teclado

const 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’}

};

byte 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);

步骤7:密码设置

在这一部分中,我们定义密码,然后我们需要输入一个密码,它是一个空字符串。

//variáveis resposnsáveis por armazenar as senhas

const String SENHA_ESPERADA = “1234ABCD”;

String SENHA_DIGITADA = “”;

//instancia de SoftwareSerial para nos comunicar com o Display via serial

SoftwareSerial displaySerial = SoftwareSerial(RX_PIN, TX_PIN, INVERTED);

步骤8:设置

至于设置,这里是displaySerial。开始(2,400),这与速度有关。在我们的情况下,这足以发送一个字节。之后,需要等待700毫秒。我们将初始配置中的displaySerial.print(initialConfig)包含进来,新延迟为10毫秒,然后转到启动函数。在启动函数中,我们将displaySerial.print(“ password:”)放入。

void setup(){

Serial.begin(2400);

//inicializando a serial de comunicação com o display

//importante o baud rate ser de 2400

displaySerial.begin(2400);

//tempo de espera pela inicialização do display

delay(700);

//seta a configuração inicial do display

displaySerial.print(configInicial);

delay(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:”);

}

步骤9:循环

,我们创建一个customKey = customKeypad.getKey(),然后按顺序输入一个Switch命令。

//captura a tecla pressionada do teclado

char customKey = customKeypad.getKey();

//caso alguma tecla foi pressionada

if (customKey){

Serial.println(customKey);

switch(customKey)

{

/。../

}

}

循环开关第1部分

在Switch命令内部:如果按下该键,它将显示可打印键的可能性列表,并增加密码:使用customKey并连接输入的密码。接下来,displaySerial.print(customKey)显示键的内容。

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);

//imrpime na tela o símbolo pressionado

displaySerial.print(customKey);

break;

循环开关第2部分

在此代码中,我们显示了一个场景,用于了解CLEAR键是否被按下。如果您键入字母C并清除包含您所输入密码的变量,则它将调用命令以清除屏幕并重新启动。

//caso a tecla CLEAR tenha sido pressionada

case ‘c’:

//limpa a variável que guarda a senha que está sendo digitada

SENHA_DIGITADA = “”;

//chama o comando para limpar a tela

displaySerial.print(limparTela);

//configura a mensagem para digitar a senha

inicio();

break;

回路开关第3部分

另一种可能性是如果键入字母E。在这种情况下,如果输入的密码正确或不正确,屏幕将被清理并分析。接下来,我们将给出2秒的新延迟,清除屏幕,重置密码变量,然后返回到开头。

//caso a tecla ENTER seja pressionada, devemos comparar as senhas

case ‘e’:

//limpa a tela

displaySerial.print(limparTela);

//se a senha digitada foi igual a ESPERADA

if(SENHA_ESPERADA==SENHA_DIGITADA)

{

Serial.println(“Senha Correta!”);

//imprime mensagem de senha correta

displaySerial.print(“Senha Correta!!!”);

}

//caso senha esteja errada

else{

Serial.println(“Senha Incorreta!”);

//imprime mensagem 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);
       责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分