电子说
步骤1:串行显示
这是与UART,它是带有TXRX的RS。它也存在于I2C版本中,但其他型号将保留用于即将到来的组装。在这种情况下,该显示由UART通过RS工作。
步骤2:矩阵键盘
矩阵示例我们使用的键盘是照片的键盘,它在右侧。我们有一个显示其工作原理的图表。它实际上只有4x4线。因此,它使用的导线数量最少。每行和每列一根导线,因此总共有八根导线。
它不需要电源,因为它的工作方式如下:按下7时,键盘拿起7并连接
请记住,点矩阵的任何4x4键盘都可以在该程序集中使用。
步骤3:组装
在一般方案中,由于键盘没有电源,我们将八根电线直接连接到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
全部0条评论
快来发表一下你的评论吧 !