Talaan ng mga Nilalaman:

Dashboard Keyboard Na May LCD Display at Arduino Uno: 9 Mga Hakbang
Dashboard Keyboard Na May LCD Display at Arduino Uno: 9 Mga Hakbang

Video: Dashboard Keyboard Na May LCD Display at Arduino Uno: 9 Mga Hakbang

Video: Dashboard Keyboard Na May LCD Display at Arduino Uno: 9 Mga Hakbang
Video: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, Hulyo
Anonim
Image
Image
Dashboard Keyboard Na May LCD Display at Arduino Uno
Dashboard Keyboard Na May LCD Display at Arduino Uno
Dashboard Keyboard Na May LCD Display at Arduino Uno
Dashboard Keyboard Na May LCD Display at Arduino Uno

Ito ay isang matrix keyboard na tumatakbo kasama ang isang LCD display at isang Arduino Uno, ang pinaka pangunahing mayroon ngayon. Ang layunin ng pag-set up na ito ay upang lumikha ng isang programa na tumatanggap ng isang password na nai-type sa matrix keyboard, inihambing ito sa tamang password, at nagpapakita ng isang mensahe ng kumpirmasyon sa display.

Mahalagang tandaan na ang parehong matrix keyboard at ang display na ito ay gumagana sa ESP8266 at ESP32.

Tulad ng nakikita mo, pinapagana namin ang circuit sa Arduino na may isang USB, dahil hindi kami gumagamit ng isang panlabas na mapagkukunan. Walong wires na nakakonekta sa isang napaka-simpleng paraan sa mga port ng Arduino na gumagawa ng koneksyon ng aming keyboard. Ang keyboard na ito ay walang lakas at passive, na lubos na pinapadali ang mga koneksyon.

Ang display ay konektado sa isang Arduino sa pamamagitan ng UART, ang serial port, na nagpapagana rin sa aparato.

Sa isang pagpapakita, ipinapakita namin sa video ang aming pag-check sa circuit kung ang password na nai-type sa keyboard ay tama o hindi.

Sa PDF na ginamit sa video at magagamit dito, mayroon kaming kumpletong pinout ng chip na ginagamit.

Hakbang 1: Serial Display

Serial Display
Serial Display
Serial Display
Serial Display

Ito ang serial display na nakikipag-usap sa UART, na RS na may isang TXRX. Mayroon din ito sa mga bersyon ng I2C, ngunit ang iba pang mga modelo ay mananatili para sa isang paparating na pagpupulong. Sa kasong ito, gumagana ang display na ito ng UART ng RS.

Hakbang 2: Matrix Keyboard

Matrix Keyboard
Matrix Keyboard

Ang halimbawa ng matrix keyboard na ginagamit namin ay ang larawan, at ito ay nasa kanang bahagi. Mayroon kaming isang diagram na nagpapakita kung paano ito gumagana. Ito ay mayroon lamang 4x4 na mga linya. Sa gayon, gumagamit ito ng minimum na halaga ng mga wire; isang kawad para sa bawat hilera at haligi, upang mayroong walong mga wire sa kabuuan.

Hindi nito kailangan ng lakas dahil gumagana ito tulad ng sumusunod: kapag pinindot ang 7, kukunin ng keyboard ang 7 at kumonekta sa linya at haligi, na ginagawang posible ang pagkakakilanlan sa pamamagitan ng awtomatikong pag-scan ng algorithm.

Mahalagang tandaan na ang anumang 4x4 keyboard na dot matrix ay gagana sa pagpupulong na ito.

Hakbang 3: Assembly

Assembly
Assembly

Sa pangkalahatang pamamaraan, kumokonekta kami nang walong mga wire nang direkta sa mga port ng Arduino, dahil ang keyboard ay walang lakas. Sa display, mayroon kaming signal ng RS 232, at positibo at negatibong lakas. Nariyan pa rin ang Backlight, na nakakonekta din (nakilala ng BKL).

Hakbang 4: Source Code

Sa source code ng proyektong ito, kailangan mong isama ang serial at keypad. Mayroon itong isang set na RX_PIN at isang TX_PIN, kinakailangan para sa serial software, at pati na rin ang INVERTED 1. Ito ay inilagay sa ilalim upang palakasin ang signal na gumagamit ng input na may baligtad na lohika.

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

Hakbang 5: Ipakita ang Mga Utos

Mga Utos sa Display
Mga Utos sa Display

Mahalaga: Sa display na ito, hindi sapat na maglagay lamang ng isang string dito. Kailangan mong magpadala ng mga control character. Naglalaman ang PDF ng link ng site kung saan mayroon kang isang manwal ng pagpapakita na ito. Ngunit kung mayroon kang isang serial display ng isa pang tatak, magandang tingnan ang kanilang mga control code na nauugnay dito. Sa modelong ito, halimbawa, kapag nagpapadala kami ng isang tiyak na kontrol (impormasyon para sa display na ito, halimbawa), kailangan naming magpadala ng isang unlapi, ang bilang 254, upang paganahin ang komunikasyon.

Kaya nag-set up kami ng isang ARRAY upang mapadali ang mga bagay, na kung saan ay isang koleksyon ng mga variable na na-access gamit ang isang numerong indeks. Ipapadala ito sa display bilang isang paunang pagsasaayos.

// comando para limpar toda a tela do displayconst char limparTela = {254, 1}; // comandos de configuração inicial / * 254, 254 aclight 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};

Hakbang 6: Pagpapatakbo ng Keyboard

Paano gumagana ang keyboard? Una, nai-mount ang isang array. Ang array na ito ay ng character na talagang ipapakita doon. Kaya't kung maglagay ako ng X, kapag pinindot ko ang unang kaliwang pindutan sa itaas, ipinapakita ito. Ito ang nilalaman ng keyboard, na kung saan ito ang uutos.

Ang iba pang mga bagay na mayroon kaming kahulugan ay ang hilera numero 4 at haligi numero 4, sa kaso ng ARRAY ng keyboard na ito. Mayroon pa kaming mga pin ng mga linya, na kung saan ay ang mga pin ng Arduino, at ang mga pin ng haligi. Mayroon pa kaming isang tagabuo ng customKeypad Keypad na may mga parameter ng simbolo, pin, hilera, at haligi.

const byte 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 '}}; 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 nagpapahiwatig bilang colunas do teclado // instancia de Keypad, responsável por capturar a tecla pressionada Keypad customKeypad = Keypad (makeKeymap (SIMBOLOS), PINOS_LINHA, PINOS_COLUNA, LINHAS, COLUNAS);

Hakbang 7: Pagtatakda ng Password

Sa bahaging ito, tinutukoy namin ang password, at pagkatapos ay kailangan naming magpasok ng isang password, na isang walang laman na string. Sa ibaba, inilalagay namin ang halimbawa ng softwareSerial.

// variáveis resposnsáveis por armazenar as senhasconst String SENHA_ESPERADA = "1234ABCD"; String SENHA_DIGITADA = ""; // instancia de SoftwareSerial para sa comunicar com o Display sa pamamagitan ng serial SoftwareSerial displaySerial = SoftwareSerial (RX_PIN, TX_PIN, INVERTED);

Hakbang 8: Pag-setup

Tulad ng para sa Pag-setup, narito ang displaySerial.begin (2, 400), na tungkol sa bilis. Sa aming kaso, sapat na ito upang magpadala ng isang byte. Kasunod nito, may paghihintay ng 700 milliseconds. Isinasama namin ang displaySerial.print (initialConfig) mula sa paunang pagsasaayos na may isang bagong pagkaantala ng 10 milliseconds, at pumunta kami sa pagpapaandar na panimula. Sa pagpapaandar na panimula, inilalagay namin ang 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); antala (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:"); }

Hakbang 9: Mag-loop

Sa loop, lumikha kami ng isang customKey = customKeypad.getKey (), at sa pagkakasunud-sunod, nagpasok kami ng isang utos na Lumipat.

// captura a tecla pressionada do teclado char customKey = customKeypad.getKey (); // caso alguma tecla foi pressionada if (customKey) {Serial.println (customKey); lumipat (customKey) {/… /}}

Loop Switch Part 1

Sa loob ng utos ng Switch: ipinapakita nito ang listahan ng mga posibilidad ng mga naka-print na key, kung pinindot, at nadaragdagan ang password: kinukuha ang customKey at pinagsama ang ipinasok na password. Susunod, ipinapakita ng displaySerial.print (customKey) ang mga pangunahing nilalaman.

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

Loop Switch Part 2

Sa code na ito, nagpapakita kami ng isang pangyayari para sa kung ang CLEAR key ay pinindot. Kung nai-type mo ang letrang C at i-clear ang variable na may hawak ng password na iyong nai-type, tinawag nito ang utos upang i-clear ang screen at mag-restart.

// 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 (); pahinga;

Loop Switch Part 3

Ang isa pang posibilidad ay kung nai-type mo ang titik E. Sa kasong ito, malilinis at susuriin ang screen kung tama o mali ang ipinasok na password. Susunod, bibigyan namin ang isang bagong pagkaantala ng 2 segundo, i-clear ang screen, i-reset ang variable ng password, at bumalik sa simula.

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

Inirerekumendang: