แป้นพิมพ์แดชบอร์ดพร้อมจอแสดงผล LCD และ Arduino Uno: 9 ขั้นตอน
แป้นพิมพ์แดชบอร์ดพร้อมจอแสดงผล LCD และ Arduino Uno: 9 ขั้นตอน
Image
Image
แป้นพิมพ์แดชบอร์ดพร้อมจอแสดงผล LCD และ Arduino Uno
แป้นพิมพ์แดชบอร์ดพร้อมจอแสดงผล LCD และ Arduino Uno
แป้นพิมพ์แดชบอร์ดพร้อมจอแสดงผล LCD และ Arduino Uno
แป้นพิมพ์แดชบอร์ดพร้อมจอแสดงผล LCD และ Arduino Uno

นี่คือแป้นพิมพ์เมทริกซ์ที่ทำงานพร้อมกับจอ LCD และ Arduino Uno ซึ่งเป็นพื้นฐานที่สุดที่มีอยู่ในปัจจุบัน จุดประสงค์ของการตั้งค่านี้คือการสร้างโปรแกรมที่รับรหัสผ่านที่พิมพ์บนแป้นพิมพ์เมทริกซ์ เปรียบเทียบกับรหัสผ่านที่ถูกต้อง และแสดงข้อความยืนยันบนจอแสดงผล

สิ่งสำคัญคือต้องจำไว้ว่าทั้งแป้นพิมพ์เมทริกซ์และจอแสดงผลนี้ใช้งานได้กับ ESP8266 และ ESP32

อย่างที่คุณเห็น เราจ่ายไฟให้กับวงจรด้วย Arduino ด้วย USB เนื่องจากเราไม่ได้ใช้แหล่งภายนอก สายไฟแปดเส้นเชื่อมต่อกับพอร์ต Arduino อย่างง่าย ๆ ทำให้การเชื่อมต่อแป้นพิมพ์ของเรา แป้นพิมพ์นี้ไม่มีพลังงานและเป็นแบบพาสซีฟ ซึ่งอำนวยความสะดวกในการเชื่อมต่ออย่างมาก

จอแสดงผลเชื่อมต่อกับ Arduino ผ่าน UART ซึ่งเป็นพอร์ตอนุกรมซึ่งให้พลังงานแก่อุปกรณ์ด้วย

ในการสาธิต เราแสดงในวิดีโอวงจรของเราตรวจสอบว่ารหัสผ่านที่พิมพ์บนแป้นพิมพ์ถูกต้องหรือไม่

ใน PDF ที่ใช้ในวิดีโอและมีให้ที่นี่ เรามีพินเอาต์ทั้งหมดของชิปที่ใช้อยู่

ขั้นตอนที่ 1: จอแสดงผลแบบอนุกรม

จอแสดงผลแบบอนุกรม
จอแสดงผลแบบอนุกรม
จอแสดงผลแบบอนุกรม
จอแสดงผลแบบอนุกรม

นี่คือจอแสดงผลแบบอนุกรมที่สื่อสารกับ UART ซึ่งเป็น RS กับ TXRX นอกจากนี้ยังมีอยู่ในเวอร์ชัน I2C แต่รุ่นอื่น ๆ จะยังคงอยู่สำหรับการประกอบที่จะเกิดขึ้น ในกรณีนี้ การแสดงผลนี้ทำงานโดย UART โดย RS

ขั้นตอนที่ 2: แป้นพิมพ์เมทริกซ์

แป้นพิมพ์เมทริกซ์
แป้นพิมพ์เมทริกซ์

ตัวอย่างของแป้นพิมพ์เมทริกซ์ที่เราใช้คือของรูปภาพและอยู่ทางด้านขวา เรามีไดอะแกรมที่แสดงวิธีการทำงาน อันที่จริงมีเพียงเส้น 4x4 เท่านั้น ดังนั้นจึงใช้จำนวนสายไฟขั้นต่ำ หนึ่งเส้นสำหรับแต่ละแถวและคอลัมน์ เพื่อให้มีทั้งหมดแปดสาย

ไม่ต้องการพลังงานเพราะทำงานดังนี้ เมื่อกด 7 แป้นพิมพ์จะหยิบ 7 และเชื่อมต่อกับบรรทัดและคอลัมน์ ซึ่งทำให้ระบุตัวตนได้โดยการสแกนอัลกอริทึมโดยอัตโนมัติ

สิ่งสำคัญคือต้องจำไว้ว่าแป้นพิมพ์ 4x4 ที่เป็นดอทเมทริกซ์จะทำงานในชุดประกอบนี้

ขั้นตอนที่ 3: การประกอบ

การประกอบ
การประกอบ

โดยทั่วไป เราต่อสายไฟ 8 เส้นเข้ากับพอร์ตของ Arduino โดยตรง เนื่องจากคีย์บอร์ดไม่มีไฟ ในจอแสดงผลเรามีสัญญาณ RS 232 และกำลังบวกและลบ ไฟแบ็คไลท์ยังคงปรากฏอยู่ ซึ่งเชื่อมต่ออยู่แล้ว (ระบุโดย BKL)

ขั้นตอนที่ 4: รหัสที่มา

ในซอร์สโค้ดของโปรเจ็กต์นี้ คุณต้องรวมซีเรียลและคีย์แพด มีชุด RX_PIN และ TX_PIN ซึ่งจำเป็นสำหรับซอฟต์แวร์ซีเรียล และ INVERTED 1 ซึ่งถูกวางไว้ด้านล่างเพื่อขยายสัญญาณที่ใช้อินพุตด้วยตรรกะแบบกลับด้าน

// 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 x 255 // pino แสดงผล LCD #define TX_PIN 3 // กลับด้านโลจิกา dos pinos Rx e Tx, tratando LOW como HIGH e vice-versa #define INVERTED 1

ขั้นตอนที่ 5: แสดงคำสั่ง

แสดงคำสั่ง
แสดงคำสั่ง

สำคัญ: ในจอแสดงผลนี้ แค่ใส่สตริงลงไปเท่านั้นยังไม่พอ คุณต้องส่งอักขระควบคุม PDF มีลิงก์ของไซต์ที่คุณมีคู่มือสำหรับการแสดงผลนี้ แต่ถ้าคุณมีจอแสดงผลแบบอนุกรมของแบรนด์อื่น คุณควรดูรหัสควบคุมที่เกี่ยวข้องกับสิ่งนี้ ในโมเดลนี้ ตัวอย่างเช่น เมื่อเราส่งการควบคุมบางอย่าง (เช่น ข้อมูลสำหรับการแสดงผลนี้) เราจำเป็นต้องส่งคำนำหน้า หมายเลข 254 เพื่อเปิดใช้งานการสื่อสาร

ดังนั้นเราจึงตั้งค่า ARRAY เพื่ออำนวยความสะดวกให้กับสิ่งต่าง ๆ ซึ่งเป็นชุดของตัวแปรที่เข้าถึงได้ด้วยดัชนีตัวเลข สิ่งนี้จะถูกส่งไปยังจอแสดงผลเป็นการกำหนดค่าเริ่มต้น

//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 หรือ 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 ในกรณีของ ARRAY ของแป้นพิมพ์นี้ เรายังมีหมุดของเส้น ซึ่งก็คือหมุด Arduino และหมุดของคอลัมน์ เรายังคงมีตัวสร้างปุ่มกดแบบกำหนดเองพร้อมพารามิเตอร์สัญลักษณ์ พิน แถวและคอลัมน์

const ไบต์ LINHAS = 4; //número de linhas ทำ tecladoconst ไบต์ COLUNAS = 4; //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 '} }; ไบต์ PINOS_LINHA[LINHAS] = {8, 9, 10, 11}; //pinos que indicam เป็น linhas do teclado ไบต์ PINOS_COLUNA[COLUNAS] = {4, 5, 6, 7}; //pinos que indicam เป็น 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: การตั้งค่ารหัสผ่าน

ในส่วนนี้ เรากำหนดรหัสผ่าน จากนั้นเราต้องป้อนรหัสผ่าน ซึ่งเป็นสตริงว่าง ด้านล่าง เราใส่อินสแตนซ์ของ softwareSerial

//variáveis resposnsáveis por armazenar เป็น senhasconst String SENHA_ESPERADA = "1234ABCD"; สตริง SENHA_DIGITADA = ""; //ตัวอย่าง SoftwareSerial สำหรับ comunicar com o แสดงผ่าน Serial SoftwareSerial displaySerial = SoftwareSerial (RX_PIN, TX_PIN, INVERTED);

ขั้นตอนที่ 8: ตั้งค่า

สำหรับการตั้งค่า นี่คือ displaySerial.begin (2, 400) ซึ่งเกี่ยวกับความเร็ว ในกรณีของเรา การส่งไบต์ก็เพียงพอแล้ว ต่อไปนี้คือการรอ 700 มิลลิวินาที เรารวม displaySerial.print (initialConfig) จากการกำหนดค่าเริ่มต้นด้วยความล่าช้าใหม่ 10 มิลลิวินาที และเราไปที่ฟังก์ชันเริ่มต้น ในฟังก์ชันเริ่มต้น เราใส่ displaySerial.print ("password:")

การตั้งค่าเป็นโมฆะ () { Serial.begin (2400); //inicializando a serial de comunicação com o display // สำคัญ o อัตรารับส่งข้อมูล 2400 displaySerial.begin (2400); //tempo de espera pela inicialização แสดงผลล่าช้า (700); //seta a configuração inicial do display displaySerial.print(configInicial); //ตั้งค่า ล่าช้า(10); inicio(); } //การตอบกลับของ função 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 ถือเป็นโมฆะ inicio(){ displaySerial.print("เสนา:"); }

ขั้นตอนที่ 9: วนซ้ำ

ในลูป เราสร้าง customKey = customKeypad.getKey () และในลำดับ เราป้อนคำสั่ง Switch

//จับ tecla pressionada ทำ teclado char customKey = customKeypad.getKey(); //caso alguma tecla foi pressionada if (customKey) { Serial.println (customKey); สวิตช์ (customKey) { /…/ } }

ลูปสวิตช์ ตอนที่ 1

ภายในคำสั่ง Switch: จะแสดงรายการความเป็นไปได้ของปุ่มที่พิมพ์ได้ หากกด และเพิ่มรหัสผ่าน: ใช้ customKey และเชื่อมต่อรหัสผ่านที่ป้อน ถัดไป displaySerial.print (customKey) จะแสดงเนื้อหาคีย์

สวิตช์ (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); หยุดพัก;

ลูปสวิตช์ ตอนที่ 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 และ tela displaySerial.print(limparTela); //configura a mensagem สำหรับ digitar a senha inicio(); หยุดพัก;

ลูปสวิตช์ ตอนที่ 3

ความเป็นไปได้อีกอย่างหนึ่งคือถ้าคุณพิมพ์ตัวอักษร E ในกรณีนี้ หน้าจอจะถูกทำความสะอาดและวิเคราะห์ว่ารหัสผ่านที่ป้อนถูกต้องหรือไม่ถูกต้อง ต่อไป เราจะให้การหน่วงเวลาใหม่ 2 วินาที ล้างหน้าจอ รีเซ็ตตัวแปรรหัสผ่าน และกลับสู่จุดเริ่มต้น

//caso a tecla ENTER seja pressionada, devemos เปรียบเทียบเป็นกรณี senhas 'e': //limpa a tela displaySerial.print(limparTela); //se a senha digitada foi igual a ESPERADA if(SENHA_ESPERADA==SENHA_DIGITADA) { Serial.println ("SENHA_ESPERADA!"); // imprime mensagem de senha correta displaySerial.print("Senha Correta!!!"); } //caso senha esteja errada อื่น{ Serial.println("Senha Incorreta!"); // imprime mensagem de senha incorreta displaySerial.print("Senha Incorreta!"); // imprime mensagem เดอ senha incorreta displaySerial.print } //aguarda 2 segundos para limpar a tela novamente e esperar uma nova senha ser digitada ล่าช้า (2000); displaySerial.print (limparTela);

แนะนำ: