Isi kandungan:

Papan Kekunci Dashboard Dengan Paparan LCD dan Arduino Uno: 9 Langkah
Papan Kekunci Dashboard Dengan Paparan LCD dan Arduino Uno: 9 Langkah

Video: Papan Kekunci Dashboard Dengan Paparan LCD dan Arduino Uno: 9 Langkah

Video: Papan Kekunci Dashboard Dengan Paparan LCD dan Arduino Uno: 9 Langkah
Video: Arduino Tutorial 3: WEMOS D1 interface with BMP180 BMP085 logged in the Thingspeak Dashboard #iot 2024, Julai
Anonim
Image
Image
Papan Kekunci Dashboard Dengan Paparan LCD dan Arduino Uno
Papan Kekunci Dashboard Dengan Paparan LCD dan Arduino Uno
Papan Kekunci Dashboard Dengan Paparan LCD dan Arduino Uno
Papan Kekunci Dashboard Dengan Paparan LCD dan Arduino Uno

Ini adalah papan kekunci matriks yang disertakan dengan paparan LCD dan Arduino Uno, yang paling asas yang ada sekarang. Tujuan penyediaan ini adalah untuk membuat program yang menerima kata laluan yang ditaip pada papan kekunci matriks, membandingkannya dengan kata laluan yang betul, dan menampilkan pesan pengesahan pada paparan.

Penting untuk diingat bahawa kedua-dua papan kekunci matriks dan paparan ini berfungsi dengan ESP8266 dan ESP32.

Seperti yang anda lihat, kami menghidupkan rangkaian dengan Arduino dengan USB, kerana kami tidak menggunakan sumber luaran. Lapan wayar disambungkan dengan cara yang sangat mudah ke port Arduino menjadikan sambungan papan kekunci kami. Papan kekunci ini tidak mempunyai daya dan pasif, yang sangat memudahkan penyambungan.

Paparan dihubungkan dengan Arduino melalui UART, port bersiri, yang juga memberi kuasa pada peranti.

Dalam demonstrasi, kami menunjukkan dalam video litar kami memeriksa apakah kata laluan yang ditaip pada papan kekunci betul atau tidak.

Dalam PDF yang digunakan dalam video dan tersedia di sini, kami mempunyai pinout lengkap dari chip yang sedang digunakan.

Langkah 1: Paparan Bersiri

Paparan Bersiri
Paparan Bersiri
Paparan Bersiri
Paparan Bersiri

Ini adalah paparan bersiri yang berkomunikasi dengan UART, iaitu RS dengan TXRX. Ia juga ada dalam versi I2C, tetapi model lain akan kekal untuk pemasangan yang akan datang. Dalam kes ini, paparan ini berfungsi oleh UART oleh RS.

Langkah 2: Papan Kekunci Matrix

Papan Kekunci Matriks
Papan Kekunci Matriks

Contoh papan kekunci matriks yang kami gunakan adalah foto, dan ia berada di sebelah kanan. Kami mempunyai rajah yang menunjukkan bagaimana ia berfungsi. Ia sebenarnya hanya mempunyai garis 4x4. Oleh itu, ia menggunakan jumlah wayar minimum; satu wayar untuk setiap baris dan lajur, sehingga terdapat lapan wayar secara keseluruhan.

Ia tidak memerlukan kuasa kerana berfungsi seperti berikut: ketika 7 ditekan, papan kekunci mengambil 7 dan menyambung ke garis dan lajur, yang memungkinkan pengenalan dengan mengimbas algoritma secara automatik.

Penting untuk diingat bahawa mana-mana papan kekunci 4x4 yang dot matriks akan berfungsi dalam pemasangan ini.

Langkah 3: Perhimpunan

perhimpunan
perhimpunan

Dalam skema umum, kami menghubungkan lapan wayar terus ke port Arduino, kerana papan kekunci tidak mempunyai kuasa. Di paparan, kami mempunyai isyarat RS 232, dan daya positif dan negatif. Lampu Latar masih ada, yang juga sudah terhubung (dikenal pasti oleh BKL).

Langkah 4: Kod Sumber

Dalam kod sumber projek ini, anda mesti memasukkan siri dan papan kekunci. Ia memiliki satu set RX_PIN dan TX_PIN, yang diperlukan untuk perisian bersiri, dan juga INVERTED 1. Ini diletakkan di bawahnya untuk memperkuat isyarat yang menggunakan input dengan logik terbalik.

// 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 Paparan LCD #define TX_PIN 3 // inverte a lógica dos pinos Rx e Tx, tratando LOW como TINGGI dan sebaliknya #define INVERTED 1

Langkah 5: Perintah Paparan

Perintah Paparan
Perintah Paparan

Penting: Dalam paparan ini, hanya cukup meletakkan tali di atasnya. Anda perlu menghantar watak kawalan. PDF mengandungi pautan laman web di mana anda mempunyai manual paparan ini. Tetapi jika anda mempunyai paparan bersiri jenama lain, ada baiknya anda melihat kod kawalan mereka yang berkaitan dengan ini. Dalam model ini, misalnya, ketika kita mengirim kawalan tertentu (contohnya untuk paparan ini), kita perlu mengirim awalan, nombor 254, untuk membolehkan komunikasi.

Oleh itu, kami menyediakan ARRAY untuk memudahkan sesuatu, yang merupakan kumpulan pemboleh ubah yang diakses dengan indeks angka. Ini akan dihantar ke paparan sebagai konfigurasi awal.

// comando para limpar toda a tela do displayconst 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 kursor paraficar piscando * / const char configInicial = {254, 254, 254, 1, 254, 253, 1, 254, 13};

Langkah 6: Operasi Papan Kekunci

Bagaimana fungsi papan kekunci? Pertama, ia memasang array. Susunan ini mempunyai watak yang sebenarnya akan dipaparkan di sana. Oleh itu, jika saya meletakkan X, ketika saya menekan butang kiri pertama di bahagian atas, ia akan dipaparkan. Ini adalah kandungan papan kekunci, yang akan diperintahkannya.

Perkara lain yang kita maksudkan ialah baris nombor 4 dan lajur nombor 4, dalam kes ARRAY papan kekunci ini. Kami masih mempunyai pin garis, yang merupakan pin Arduino, dan pin lajur. Kami masih mempunyai pembangun Keypad kustom dengan parameter simbol, pin, baris, dan lajur.

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 '}}; bait PINOS_LINHA [LINHAS] = {8, 9, 10, 11}; // pinos que indicam sebagai 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);

Langkah 7: Penetapan Kata Laluan

Di bahagian ini, kita menentukan kata laluan, dan kemudian kita perlu memasukkan kata laluan, yang merupakan rentetan kosong. Di bawah ini, kami meletakkan contoh perisianSerial.

// variáveis resposnsáveis por armazenar sebagai senhasconst String SENHA_ESPERADA = "1234ABCD"; Rentetan SENHA_DIGITADA = ""; // instancia de SoftwareSerial para nos comunicar com o Paparan melalui perisian siriSerial displaySerial = SoftwareSerial (RX_PIN, TX_PIN, INVERTED);

Langkah 8: Persediaan

Mengenai Penyediaan, berikut adalah displaySerial.begin (2, 400), yang mengenai kelajuan. Dalam kes kami, ini cukup untuk menghantar bait. Berikutan ini, terdapat penantian 700 milisaat. Kami menyertakan displaySerial.print (initialConfig) dari konfigurasi awal dengan kelewatan baru 10 milisaat, dan kami pergi ke fungsi permulaan. Dalam fungsi permulaan, kami meletakkan displaySerial.print ("kata laluan:").

batal persediaan () {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 displaySerial.print (configInicial); kelewatan (10); inicio (); } // função responsável por imprimir na tela a mensagem para digitar a senha // é chamada toda vez q a senha telah digitada e perbandingan, também quando // a tecla limpar display juga pressionada. batal inicio () {displaySerial.print ("Senha:"); }

Langkah 9: Gelung

Dalam gelung, kami membuat customKey = customKeypad.getKey (), dan mengikut urutan, kami memasukkan perintah Switch.

// captura a tecla pressionada do teclado char customKey = customKeypad.getKey (); // caso alguma tecla juga pressionada jika (customKey) {Serial.println (customKey); tukar (customKey) {/… /}}

Suis Gelung Bahagian 1

Di dalam perintah Switch: ia menunjukkan senarai kemungkinan kunci yang boleh dicetak, jika ditekan, dan menambah kata laluan: mengambil customKey dan menggabungkan kata laluan yang dimasukkan. Seterusnya, displaySerial.print (customKey) menunjukkan isi utama.

beralih (customKey) {// caso alguma das teclas imprimíveis juga 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); rehat;

Gelung Suis Bahagian 2

Dalam kod ini, kami menunjukkan senario sekiranya kekunci CLEAR ditekan. Sekiranya anda mengetik huruf C dan membersihkan pemboleh ubah yang menyimpan kata laluan yang anda taip, maka ia memanggil arahan untuk membersihkan skrin dan memulakan semula.

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

Suis Gelung Bahagian 3

Kemungkinan lain adalah jika anda mengetik huruf E. Dalam kes ini, skrin akan dibersihkan dan dianalisis jika kata laluan yang dimasukkan betul atau tidak betul. Seterusnya, kami akan memberikan kelewatan baru 2 saat, membersihkan skrin, menetapkan semula pemboleh ubah kata laluan, dan kembali ke awal.

// caso a tecla ENTER seja pressionada, devemos dibandingkan dengan kes senhas 'e': // limpa a tela displaySerial.print (limparTela); // se a senha digitada juga memberi ESPERADA jika (SENHA_ESPERADA == SENHA_DIGITADA) {Serial.println ("Senha Correta!"); // imprime mensagem de senha coreta displaySerial.print ("Senha Correta !!!"); } // caso senha esteja errada lain {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);

Disyorkan: