Mục lục:

Bàn phím bảng điều khiển với màn hình LCD và Arduino Uno: 9 bước
Bàn phím bảng điều khiển với màn hình LCD và Arduino Uno: 9 bước

Video: Bàn phím bảng điều khiển với màn hình LCD và Arduino Uno: 9 bước

Video: Bàn phím bảng điều khiển với màn hình LCD và Arduino Uno: 9 bước
Video: 🔴 Arduino #26 | Màn Hình LCD 16x2 Kết Hợp Module I2C Hiển Thị Thông Tin 2024, Tháng bảy
Anonim
Image
Image
Bàn phím bảng điều khiển với màn hình LCD và Arduino Uno
Bàn phím bảng điều khiển với màn hình LCD và Arduino Uno
Bàn phím bảng điều khiển với màn hình LCD và Arduino Uno
Bàn phím bảng điều khiển với màn hình LCD và Arduino Uno

Đây là bàn phím ma trận chạy cùng với màn hình LCD và Arduino Uno, cơ bản nhất tồn tại ngày nay. Mục đích của thiết lập này là tạo một chương trình nhận mật khẩu được nhập trên bàn phím ma trận, so sánh mật khẩu đó với mật khẩu chính xác và hiển thị thông báo xác nhận trên màn hình.

Điều quan trọng cần nhớ là cả bàn phím ma trận và màn hình này đều hoạt động với ESP8266 và ESP32.

Như bạn có thể thấy, chúng tôi cấp nguồn cho mạch Arduino bằng USB, vì chúng tôi không sử dụng nguồn bên ngoài. Tám dây được kết nối theo cách rất đơn giản với các cổng của Arduino tạo nên kết nối bàn phím của chúng tôi. Bàn phím này không có nguồn và bị động, điều này tạo điều kiện thuận lợi cho các kết nối.

Màn hình được kết nối với Arduino thông qua UART, cổng nối tiếp, cũng cấp nguồn cho thiết bị.

Trong một cuộc biểu tình, chúng tôi cho thấy trong video kiểm tra mạch của chúng tôi xem mật khẩu được nhập trên bàn phím có đúng hay không.

Trong tệp PDF được sử dụng trong video và có sẵn ở đây, chúng tôi có sơ đồ chân đầy đủ của con chip đang được sử dụng.

Bước 1: Hiển thị nối tiếp

Hiển thị nối tiếp
Hiển thị nối tiếp
Hiển thị nối tiếp
Hiển thị nối tiếp

Đây là màn hình nối tiếp giao tiếp với UART, là RS với TXRX. Nó cũng tồn tại trong các phiên bản I2C, nhưng các mô hình khác sẽ vẫn được lắp ráp sắp tới. Trong trường hợp này, màn hình này hoạt động bởi UART bởi RS.

Bước 2: Bàn phím ma trận

Bàn phím ma trận
Bàn phím ma trận

Ví dụ về bàn phím ma trận mà chúng tôi sử dụng là trong ảnh và nó nằm ở phía bên phải. Chúng tôi có một sơ đồ cho thấy nó hoạt động như thế nào. Nó thực sự chỉ có 4x4 dòng. Do đó, nó sử dụng số lượng dây tối thiểu; một dây cho mỗi hàng và cột, sao cho có tổng cộng tám dây.

Nó không cần nguồn vì nó hoạt động như sau: khi nhấn phím 7, bàn phím sẽ chọn phím 7 và kết nối với dòng và cột, giúp nhận dạng bằng cách quét thuật toán tự động.

Điều quan trọng cần nhớ là bất kỳ bàn phím 4x4 nào là ma trận điểm sẽ hoạt động trong hệ thống này.

Bước 3: Lắp ráp

cuộc họp
cuộc họp

Trong sơ đồ chung, chúng tôi kết nối tám dây trực tiếp với các cổng của Arduino, vì bàn phím không có nguồn. Trong màn hình, chúng ta có một tín hiệu của RS 232, và công suất âm và dương. Đèn nền vẫn còn, cũng đã được kết nối (được xác định bởi BKL).

Bước 4: Mã nguồn

Trong mã nguồn của dự án này, bạn phải bao gồm serial và keypad. Nó có một bộ RX_PIN và một TX_PIN, cần thiết cho phần mềm nối tiếp và cũng có INVERTED 1. Bộ này được đặt bên dưới để khuếch đại tín hiệu sử dụng đầu vào với logic đảo ngược.

// biblioteca responseável pela comunicação com o display LCD # include // biblioteca responseável por capturar a tecla que foi pressionada no teclado #include // pinofinityido apenas usado no contrutor do SoftwareSerial #define RX_PIN 255 // pino TX da nossnoa wire Màn hình LCD #define TX_PIN 3 // inverte a lógica dos pinos Rx e Tx, tratando LOW como HIGH e ngược lại #define INVERTED 1

Bước 5: Hiển thị lệnh

Hiển thị lệnh
Hiển thị lệnh

Quan trọng: Trong màn hình này, chỉ đặt một sợi dây trên đó là chưa đủ. Bạn cần gửi các ký tự điều khiển. PDF chứa liên kết của trang web nơi bạn có sổ tay hướng dẫn hiển thị này. Nhưng nếu bạn có màn hình nối tiếp của một thương hiệu khác, tốt hơn là bạn nên xem mã kiểm soát của họ liên quan đến điều này. Trong mô hình này, ví dụ: khi chúng tôi gửi một điều khiển nhất định (ví dụ: thông tin cho màn hình này), chúng tôi cần gửi một tiền tố, số 254, để kích hoạt giao tiếp.

Vì vậy, chúng tôi thiết lập ARRAY để tạo điều kiện thuận lợi cho mọi thứ, là tập hợp các biến được truy cập bằng chỉ mục số. Điều này sẽ được gửi đến màn hình dưới dạng cấu hình ban đầu.

// 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 con trỏ paraficar piscando * / const char configInicial = {254, 254, 254, 1, 254, 253, 1, 254, 13};

Bước 6: Thao tác bàn phím

Bàn phím hoạt động như thế nào? Đầu tiên, nó gắn kết một mảng. Mảng này là của ký tự sẽ thực sự được hiển thị ở đó. Vì vậy, nếu tôi đặt một dấu X, khi tôi nhấn nút đầu tiên bên trái ở trên cùng, nó sẽ được hiển thị. Đây là nội dung của bàn phím, là những gì nó sẽ ra lệnh.

Những thứ khác mà chúng tôi có định nghĩa là hàng số 4 và cột số 4, trong trường hợp SẮP XẾP của bàn phím này. Chúng ta vẫn có các chân của các dòng, đó là các chân Arduino và các chân của cột. Chúng tôi vẫn có một trình tạo bàn phím CustomKeypad với các tham số biểu tượng, ghim, hàng và cột.

const byte LINHAS = 4; // número de linhas do tecladoconst byte COLUNAS = 4; // número de colunas do teclado // định nghĩa 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, responseável bởi capturar a tecla pressionada Keypad customKeypad = Keypad (makeKeymap (SIMBOLOS), PINOS_LINHA, PINOS_COLUNA, LINHAS, COLUNAS);

Bước 7: Cài đặt mật khẩu

Trong phần này, chúng ta xác định mật khẩu, và sau đó chúng ta cần nhập mật khẩu, là một chuỗi rỗng. Dưới đây, chúng tôi đặt ví dụ của softwareSerial.

// variáveis resposnsáveis bởi armazenar as senhasconst String SENHA_ESPERADA = "1234ABCD"; Chuỗi SENHA_DIGITADA = ""; // instancia de SoftwareSerial para nos comunicar com o Hiển thị qua nối tiếp SoftwareSerial displaySerial = SoftwareSerial (RX_PIN, TX_PIN, INVERTED);

Bước 8: Thiết lập

Về phần Cài đặt, đây là displaySerial.begin (2, 400), nói về tốc độ. Trong trường hợp của chúng tôi, điều này là đủ để gửi một byte. Sau đó, có khoảng thời gian chờ là 700 mili giây. Chúng tôi bao gồm displaySerial.print (initialConfig) từ cấu hình ban đầu với độ trễ mới là 10 mili giây và chúng tôi chuyển đến hàm bắt đầu. Trong hàm start, chúng tôi đặt 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 làm trễ hiển thị (700); // seta a configuração inicial do display displaySerial.print (configInicial); chậm trễ (10); inicio (); } // função responseável por printmir 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:"); }

Bước 9: Vòng lặp

Trong vòng lặp, chúng tôi tạo một customKey = customKeypad.getKey () và trong chuỗi, chúng tôi nhập lệnh Switch.

// captura a tecla pressionada do teclado char customKey = customKeypad.getKey (); // caso alguma tecla foi pressionada if (customKey) {Serial.println (customKey); chuyển đổi (customKey) {/… /}}

Chuyển mạch vòng 1

Bên trong lệnh Switch: nó hiển thị danh sách các khả năng của các phím có thể in, nếu được nhấn và tăng mật khẩu: lấy customKey và nối mật khẩu đã nhập. Tiếp theo, displaySerial.print (customKey) hiển thị các nội dung chính.

switch (customKey) {// caso alguma das teclas printmí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); nghỉ;

Chuyển mạch vòng 2

Trong đoạn mã này, chúng tôi hiển thị một kịch bản nếu phím XÓA được nhấn. Nếu bạn nhập ký tự C và xóa biến chứa mật khẩu bạn đang nhập, thì biến đó sẽ gọi lệnh xóa màn hình và khởi động lại.

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

Chuyển mạch vòng 3

Một khả năng khác là nếu bạn nhập ký tự E. Trong trường hợp này, màn hình sẽ được làm sạch và phân tích xem mật khẩu đã nhập là đúng hay sai. Tiếp theo, chúng tôi sẽ đưa ra thời gian trễ mới là 2 giây, xóa màn hình, đặt lại biến mật khẩu và quay lại từ đầu.

// 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!"); // printme mensagem de senha correta displaySerial.print ("Senha Correta !!!"); } // caso senha esteja errada else {Serial.println ("Senha Incorreta!"); // printme mensagem de senha increta displaySerial.print ("Senha Incorreta!"); } // aguarda 2 segundos para limpar a tela novamente e esperar uma nova senha ser digitada delay (2000); displaySerial.print (limparTela);

Đề xuất: