สารบัญ:

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

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

วีดีโอ: แป้นพิมพ์แดชบอร์ดพร้อมจอแสดงผล LCD และ Arduino Uno: 9 ขั้นตอน
วีดีโอ: EP. 2 Arduino | สอนใช้งาน Arduino Uno + DHT22 แสดงผลผ่านจอ LCD 20x4 I2C (Step-by-Step) 2024, พฤศจิกายน
Anonim
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);

แนะนำ: