步驟1:串行顯示
這是與UART,它是帶有TXRX的RS。它也存在于I2C版本中,但其他型號(hào)將保留用于即將到來(lái)的組裝。在這種情況下,該顯示由UART通過(guò)RS工作。
步驟2:矩陣鍵盤(pán)
矩陣示例我們使用的鍵盤(pán)是照片的鍵盤(pán),它在右側(cè)。我們有一個(gè)顯示其工作原理的圖表。它實(shí)際上只有4x4線。因此,它使用的導(dǎo)線數(shù)量最少。每行和每列一根導(dǎo)線,因此總共有八根導(dǎo)線。
它不需要電源,因?yàn)樗墓ぷ鞣绞饺缦拢喊聪?時(shí),鍵盤(pán)拿起7并連接
請(qǐng)記住,點(diǎn)矩陣的任何4x4鍵盤(pán)都可以在該程序集中使用。
步驟3:組裝
在一般方案中,由于鍵盤(pán)沒(méi)有電源,我們將八根電線直接連接到Arduino的端口。在顯示屏上,我們有一個(gè)RS 232信號(hào)以及正負(fù)電源。背光仍然存在,并且已經(jīng)連接(由BKL標(biāo)識(shí))。
步驟4:源代碼
在該項(xiàng)目的源代碼中,則必須包括串行和鍵盤(pán)。它具有串行軟件必需的設(shè)置RX_PIN和TX_PIN,以及INVERTED1。它位于下面,用于放大使用反相邏輯輸入的信號(hào)。
//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步:顯示命令
重要信息:在此顯示中,僅在其上放置一個(gè)字符串是不夠的。您需要發(fā)送控制字符。 PDF包含您具有該顯示手冊(cè)的站點(diǎn)的鏈接。但是,如果您有其他品牌的串行顯示器,則最好查看它們與此有關(guān)的控制代碼。例如,在此模型中,當(dāng)我們發(fā)送某個(gè)控件(例如有關(guān)此顯示的信息)時(shí),我們需要發(fā)送一個(gè)前綴254,以啟用通信。
因此我們?cè)O(shè)置了一個(gè)方便事物的數(shù)組,它是使用數(shù)字索引訪問(wèn)的變量的集合。
//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:鍵盤(pán)操作
鍵盤(pán)如何工作?首先,它安裝一個(gè)數(shù)組。該數(shù)組具有將實(shí)際顯示在其中的字符。因此,如果我放了一個(gè)X,當(dāng)我按下頂部的第一個(gè)左按鈕時(shí),它就會(huì)顯示出來(lái)。這就是鍵盤(pán)的內(nèi)容,它就是命令的內(nèi)容。
在此鍵盤(pán)的陣列中,我們要定義的其他內(nèi)容是行號(hào)4和列號(hào)4。我們?nèi)匀挥芯€路的引腳,即Arduino引腳和列的引腳。我們?nèi)匀挥幸粋€(gè)帶有符號(hào),引腳,行和列參數(shù)的customKeypad鍵盤(pán)構(gòu)建器。
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:密碼設(shè)置
在這一部分中,我們定義密碼,然后我們需要輸入一個(gè)密碼,它是一個(gè)空字符串。
//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:設(shè)置
至于設(shè)置,這里是displaySerial。開(kāi)始(2,400),這與速度有關(guān)。在我們的情況下,這足以發(fā)送一個(gè)字節(jié)。之后,需要等待700毫秒。我們將初始配置中的displaySerial.print(initialConfig)包含進(jìn)來(lái),新延遲為10毫秒,然后轉(zhuǎn)到啟動(dòng)函數(shù)。在啟動(dòng)函數(shù)中,我們將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:循環(huán)
,我們創(chuàng)建一個(gè)customKey = customKeypad.getKey(),然后按順序輸入一個(gè)Switch命令。
//captura a tecla pressionada do teclado
char customKey = customKeypad.getKey();
//caso alguma tecla foi pressionada
if (customKey){
Serial.println(customKey);
switch(customKey)
{
/。../
}
}
循環(huán)開(kāi)關(guān)第1部分
在Switch命令內(nèi)部:如果按下該鍵,它將顯示可打印鍵的可能性列表,并增加密碼:使用customKey并連接輸入的密碼。接下來(lái),displaySerial.print(customKey)顯示鍵的內(nèi)容。
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;
循環(huán)開(kāi)關(guān)第2部分
在此代碼中,我們顯示了一個(gè)場(chǎng)景,用于了解CLEAR鍵是否被按下。如果您鍵入字母C并清除包含您所輸入密碼的變量,則它將調(diào)用命令以清除屏幕并重新啟動(dòng)。
//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;
回路開(kāi)關(guān)第3部分
另一種可能性是如果鍵入字母E。在這種情況下,如果輸入的密碼正確或不正確,屏幕將被清理并分析。接下來(lái),我們將給出2秒的新延遲,清除屏幕,重置密碼變量,然后返回到開(kāi)頭。
//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);
責(zé)任編輯:wv
-
lcd
+關(guān)注
關(guān)注
34文章
4427瀏覽量
167739 -
鍵盤(pán)
+關(guān)注
關(guān)注
4文章
859瀏覽量
39729 -
Arduino
+關(guān)注
關(guān)注
188文章
6471瀏覽量
187293
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論