สารบัญ:
- ขั้นตอนที่ 1: จอแสดงผลแบบอนุกรม
- ขั้นตอนที่ 2: แป้นพิมพ์เมทริกซ์
- ขั้นตอนที่ 3: การประกอบ
- ขั้นตอนที่ 4: รหัสที่มา
- ขั้นตอนที่ 5: แสดงคำสั่ง
- ขั้นตอนที่ 6: การทำงานของแป้นพิมพ์
- ขั้นตอนที่ 7: การตั้งค่ารหัสผ่าน
- ขั้นตอนที่ 8: ตั้งค่า
- ขั้นตอนที่ 9: วนซ้ำ
วีดีโอ: แป้นพิมพ์แดชบอร์ดพร้อมจอแสดงผล LCD และ Arduino Uno: 9 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
นี่คือแป้นพิมพ์เมทริกซ์ที่ทำงานพร้อมกับจอ 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);
แนะนำ:
ติดตาม: ศูนย์สื่อขั้นสูงพร้อม Odroid N2 และ Kodi (รองรับ 4k และ HEVC): 3 ขั้นตอน
ติดตาม: Advanced Media Center พร้อม Odroid N2 และ Kodi (รองรับ 4k และ HEVC): บทความนี้เป็นบทความต่อจากบทความก่อนหน้าของฉันที่ประสบความสำเร็จค่อนข้างมากเกี่ยวกับการสร้างศูนย์สื่ออเนกประสงค์ โดยอ้างอิงจาก Raspberry PI ที่ได้รับความนิยมมากในตอนแรก แต่ ในภายหลัง เนื่องจากไม่มีเอาต์พุตที่สอดคล้องกับ HEVC, H.265 และ HDMI 2.2 จึงมีสวิตช์
Blinds Control ด้วย ESP8266, Google Home และ Openhab Integration และ Webcontrol: 5 ขั้นตอน (พร้อมรูปภาพ)
การควบคุมมู่ลี่ด้วย ESP8266, Google Home และ Openhab Integration และ Webcontrol: ในคำแนะนำนี้ ฉันจะแสดงให้คุณเห็นว่าฉันเพิ่มระบบอัตโนมัติให้กับมู่ลี่ของฉันอย่างไร ฉันต้องการเพิ่มและลบระบบอัตโนมัติได้ ดังนั้นการติดตั้งทั้งหมดจึงเป็นแบบหนีบ ส่วนหลักคือ: สเต็ปเปอร์มอเตอร์ ตัวขับสเต็ปควบคุม bij ESP-01 เกียร์และการติดตั้ง
DIY IBeacon และ Beacon Scanner ด้วย Raspberry Pi และ HM13: 3 ขั้นตอน
DIY IBeacon และ Beacon Scanner ด้วย Raspberry Pi และ HM13: Story A beacon จะส่งสัญญาณอย่างต่อเนื่องเพื่อให้อุปกรณ์บลูทู ธ อื่น ๆ รู้ว่ามีอยู่ และฉันอยากได้บีคอนบลูทูธเพื่อติดตามกุญแจมาตลอด เพราะฉันลืมเอามันมาเหมือน 10 ครั้งในปีที่แล้ว และฉันก็เกิดขึ้น
RuuviTag และ PiZero W และ Blinkt! เทอร์โมมิเตอร์แบบ Bluetooth Beacon: 3 ขั้นตอน (พร้อมรูปภาพ)
RuuviTag และ PiZero W และ Blinkt! เครื่องวัดอุณหภูมิที่ใช้ Bluetooth Beacon: คำแนะนำนี้อธิบายวิธีการอ่านข้อมูลอุณหภูมิและความชื้นจาก RuuviTag โดยใช้ Bluetooth กับ Raspberry Pi Zero W และเพื่อแสดงค่าเป็นเลขฐานสองบน Pimoroni กะพริบตา! pHAT.หรือเรียกสั้นๆ ว่า จะสร้างสถานะอย่างไร
วิธีการสร้าง Quadcoptor (NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS 3DR Radio และ FlySky TH9X): 25 ขั้นตอน (พร้อมรูปภาพ)
วิธีการสร้าง Quadcoptor (NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS 3DR Radio และ FlySky TH9X): นี่คือบทแนะนำเกี่ยวกับวิธีการสร้าง Quadcopter โดยใช้มอเตอร์ NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS & วิทยุ 3DR ฉันพยายามอธิบายแต่ละขั้นตอนด้วยรูปภาพจำนวนหนึ่ง หากคุณมีคำถามหรือความคิดเห็นใด ๆ โปรดตอบกลับ