步驟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步:顯示命令
重要信息:在此顯示中,僅在其上放置一個字符串是不夠的。您需要發(fā)送控制字符。 PDF包含您具有該顯示手冊的站點的鏈接。但是,如果您有其他品牌的串行顯示器,則最好查看它們與此有關的控制代碼。例如,在此模型中,當我們發(fā)送某個控件(例如有關此顯示的信息)時,我們需要發(fā)送一個前綴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),這與速度有關。在我們的情況下,這足以發(fā)送一個字節(jié)。之后,需要等待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:循環(huán)
,我們創(chuàng)建一個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)
{
/。../
}
}
循環(huán)開關第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;
循環(huán)開關第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
-
lcd
+關注
關注
34文章
4437瀏覽量
167961 -
鍵盤
+關注
關注
4文章
859瀏覽量
39775 -
Arduino
+關注
關注
188文章
6474瀏覽量
187444
發(fā)布評論請先 登錄
相關推薦
評論