สารบัญ:
- ขั้นตอนที่ 1: รายการวัสดุ
- ขั้นตอนที่ 2: แผนผังและ Cicruit
- ขั้นตอนที่ 3: รหัส
- ขั้นตอนที่ 4: การแก้ไขค่า
- ขั้นตอนที่ 5: โครงการหลังการวิพากษ์วิจารณ์และทบทวน
- ขั้นตอนที่ 6: หลังจากงานบัดกรีบางส่วน
- ขั้นตอนที่ 7: ช่วงเวลาแห่งความจริง
- ขั้นตอนที่ 8: จุดจบ
วีดีโอ: ปุ่มกด 4×4 หนึ่งพิน: 10 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
ทุกครั้งที่ฉันเห็นปุ่มกด มันมาพร้อมกับหมุดจำนวนมาก เป็นการสิ้นเปลืองหมุด Arduino ของคุณครั้งใหญ่ ดังนั้นเราจะเรียกใช้แป้นพิมพ์ด้วยขาเดียวและขาเดียวได้หรือไม่.คำตอบอยู่ที่นี่
ขั้นตอนที่ 1: รายการวัสดุ
ฮาร์ดแวร์:
01 Arduino UNO
02 เขียงหั่นขนม
01 LCD พร้อม I2C
16 ปุ่มกด
04 ตัวต้านทาน 1.5 kΩ
04 ตัวต้านทาน 620 Ω
04 ตัวต้านทาน 220 Ω
08 ตัวต้านทาน 100 Ω
01 ตัวต้านทาน 1 kΩ
07 สายจัมเปอร์
ซอฟต์แวร์:
Arduino IDE ติดตั้งบนพีซีของคุณ
ขั้นตอนที่ 2: แผนผังและ Cicruit
แนวคิดทั้งหมดคือเรามีปุ่มกด 4*4 เมทริกซ์ที่เชื่อมต่อในแนวตั้งกับกราวด์ด้วยตะกั่วที่ถูกต้อง และในแนวนอนโดยตะกั่วอีกอัน (ตะกั่วของปุ่ม) และตัวต้านทาน 1.5 kΩ, 620Ω, 220Ω และ 100Ω ที่ปลาย 4 แถวเชื่อมต่อกันด้วยตัวต้านทาน100Ωสี่ตัวดังที่แสดงในแผนผัง
ทุกครั้งที่คุณกดปุ่ม คุณจะปิดวงจรและกระแสจะไหลผ่านเส้นทางที่แตกต่างกันและสายของตัวต้านทานที่แตกต่างกัน นั่นเป็นสาเหตุที่พิน A0 ได้รับการอ่านแบบอะนาล็อกที่แตกต่างกันสำหรับทุกๆ ปุ่มกด สิ่งที่คุณต้องการตอนนี้คือการเข้ารหัส
ขั้นตอนที่ 3: รหัส
#รวม
#รวม
LiquidCrystal_I2C จอแอลซีดี (0x3f, 20, 4);
ปุ่ม int = A0;
ค่าการอ่าน int;
การตั้งค่าเป็นโมฆะ ()
{
Serial.begin(9600);
lcd.begin();
pinMode (ปุ่ม, อินพุต);
LCD.backlight();
lcd.print("สวัสดีชาวโลก");
ล่าช้า (2000);
lcd.clear();
lcd.print("ปุ่มกด 4*4 หนึ่งพิน");
ล่าช้า (2000); }
วงเป็นโมฆะ ()
{
readvalue = analogRead (ปุ่ม);
Serial.println (ค่าอ่าน);
ถ้า (readvalue==852){lcd.clear();lcd.print("A");}
อื่น{ if (readvalue==763){lcd.clear();lcd.print("B");}
อื่น{ if (readvalue==685){lcd.clear();lcd.print("C");}
อื่น{ if (readvalue==965){lcd.clear();lcd.print("D");}
อื่น{ if (readvalue==565){lcd.clear();lcd.print("9");}
อื่น{ if (readvalue==614){lcd.clear();lcd.print("6");}
อื่น{ if (readvalue==360){lcd.clear();lcd.print("3");}
อื่น{ if (readvalue==335){lcd.clear();lcd.print("#");}
อื่น{ if (readvalue==396){lcd.clear();lcd.print("8");}
อื่น{ if (readvalue==349){lcd.clear();lcd.print("5");}
อื่น{ if (readvalue==235){lcd.clear();lcd.print("2");}
อื่น{ if (readvalue==279){lcd.clear();lcd.print("0");}
อื่น{ if (readvalue==452){lcd.clear();lcd.print("7");}
อื่น{ if (readvalue==271){lcd.clear();lcd.print("4");}
อื่น{ if (readvalue==170){lcd.clear();lcd.print("1");}
อื่น{ if (readvalue==92){lcd.clear();lcd.print("*");}else{}}}}}}}}}}}}}}}}}}
ขั้นตอนที่ 4: การแก้ไขค่า
เมื่อคุณเปิดมอนิเตอร์ซีเรียล มันจะแสดงค่า 1023 หากคุณกดปุ่ม มันจะให้การอ่านอีกครั้ง คุณต้องใช้ค่าเหล่านั้นและทำการเปลี่ยนแปลงบางอย่างในโค้ด
ขั้นตอนที่ 5: โครงการหลังการวิพากษ์วิจารณ์และทบทวน
ไม่ต้องสงสัยเลยว่าเราทั้งหมดอยู่ที่นี่เพื่อเรียนรู้และแบ่งปันความรู้ของเรา ขอบคุณความคิดเห็นบางส่วนจากชุมชนที่เป็นประโยชน์มาก ฉันตัดสินใจทำการปรับเปลี่ยนและปรับปรุงโครงการของฉัน:
ฮาร์ดแวร์:
ฉันตัดสินใจประสานส่วนประกอบทั้งหมดใน PCB เพื่อหลีกเลี่ยงปัญหาการเชื่อมต่อที่ไม่ดีในเขียงหั่นขนม
รหัส:
เพื่อนแนะนำให้ฉันใช้ซอฟต์แวร์ debouncing และเป็นเพียงการวนซ้ำ (เช่น "for" loop) เพื่อให้โปรแกรมใช้เวลาในการเลือกอ่าน หมายความว่ามีการอ่านจำนวนมาก (500 ในตัวอย่างของฉัน) แต่ต้องใช้เวลา อันสุดท้ายเท่านั้น
สำหรับ (i=1; i<= 500; i++) { // รับเฉพาะ analogread ตัวที่ 500
ค่า = analogRead(ปุ่ม);} // ซึ่งช่วยให้หลีกเลี่ยงการอ่านที่ไม่ดีได้
ขอบคุณเพื่อนอีกคนที่เขาแนะนำให้ฉันเปรียบเทียบ "ค่าที่อ่าน" กับช่วงของค่าที่ไม่ใช่ค่าหนึ่งเพราะ "ค่าที่อ่าน" ใช้ค่าจำนวนมากสำหรับการกดปุ่มเดียวกัน ตัวอย่างเช่น "A" ให้การอ่าน: 849, 850, 851 852, 853, 854, 855 จึงเป็นช่วง 7 ค่า:a threshold (852) และ 3 ค่าซ้ายและขวา สิ่งที่เราต้องทำที่นี่คือการเปรียบเทียบค่าสัมบูรณ์ของความแตกต่างระหว่าง "ค่าที่อ่าน" และ "852" ถึง "3"
if(abs(readvalue-852)<=8){lcd.clear();lcd.print("A");}
ขั้นตอนที่ 6: หลังจากงานบัดกรีบางส่วน
ขั้นตอนที่ 7: ช่วงเวลาแห่งความจริง
อย่างที่คุณเห็น บางครั้งโปรแกรมอาจสร้างความสับสนให้กับปุ่ม แต่ก็ยังใช้งานได้ ตามทฤษฎีแล้ว วงจรไม่ได้มีอะไรผิดปกติ แต่โค้ดต้องการการปรับเทียบเพิ่มเติม
ขั้นตอนที่ 8: จุดจบ
ฉันหวังว่าคุณจะชอบโครงการนี้และพยายามทำมัน บางทีคุณอาจจะทำได้ดีกว่าที่ฉันทำ
ถามฉันหากคุณมีคำถาม แสดงความคิดเห็น และอย่าลืมโหวตให้ฉันหากคุณชอบ
แนะนำ:
เราคือกลุ่มของการสอน 6 นักเรียน UQD10801 (Robocon1) จาก Universiti Tun Hussein Onn Malaysia (UTHM): ปุ่มกด 4x4 และ LCD Arduino: 3 ขั้นตอน
เราคือกลุ่มของนักเรียนฝึกหัด 6 UQD10801 (Robocon1) จาก Universiti Tun Hussein Onn Malaysia (UTHM): ปุ่มกด 4x4 และ LCD Arduino: ปุ่มกดเป็นวิธีที่ยอดเยี่ยมในการให้ผู้ใช้โต้ตอบกับโครงการของคุณ คุณสามารถใช้มันเพื่อนำทางเมนู ป้อนรหัสผ่าน และควบคุมเกมและหุ่นยนต์ ในบทช่วยสอนนี้ ฉันจะแสดงวิธีตั้งค่าปุ่มกดบน Arduino ก่อนอื่นฉันจะอธิบายว่า Ardu
ปุ่มกด Raspberry Pi พร้อมไฟ LED โลหะเปลือย: 8 ขั้นตอน
ปุ่มกด Raspberry Pi พร้อมไฟ LED Bare Metal: นี่เป็นบทช่วยสอนที่สองของฉันเกี่ยวกับการเขียนโปรแกรม Raspberry Pi 3 Bare Metal! ตรวจสอบครั้งแรกของฉันที่นี่ ครั้งสุดท้ายที่ฉันแสดงวิธีสร้างอิมเมจระบบปฏิบัติการสำหรับ raspberry pi 3 ที่กะพริบไฟ LED ดวงเดียวในบทช่วยสอนนี้ ฉันจะแสดงให้คุณเห็น h
เปิดวงจรปิดด้วย UC หนึ่งปุ่มกด หนึ่งพิน ส่วนประกอบที่ไม่ต่อเนื่อง: 5 ขั้นตอน
เปิดวงจรปิดด้วย UC หนึ่งปุ่มกด หนึ่งพิน Discrete Component.: สวัสดีทุกคน กำลังมองหาวงจรเปิด/ปิดบนเน็ต ทุกสิ่งที่ฉันพบไม่ใช่สิ่งที่ฉันกำลังมองหา ฉันกำลังพูดกับตัวเองว่ามันต้องมีวิธีการ นั่นคือสิ่งที่ฉันต้องการ-เพียงกดปุ่มเดียวเพื่อเปิดและปิด-ต้องใช้เท่านั้น
เมทริกซ์ LED ปุ่มกด: 4 ขั้นตอน
เมทริกซ์ LED แบบปุ่มกด: โปรเจ็กต์นี้ถือได้ว่าเป็นอีกหนึ่งโปรเจ็กต์ Arduino เบื้องต้นที่ล้ำหน้ากว่าโปรเจ็กต์ 'ไฟ LED กะพริบ' ทั่วไปของคุณเล็กน้อย โปรเจ็กต์นี้รวม LED matrix, ปุ่มกด, shift register (ซึ่งสามารถบันทึกพินบน Ard
ปุ่มกด IoT (D1 Mini): 6 ขั้นตอน
ปุ่มกด IoT (D1 Mini): ฉันสร้างปุ่มกด IoT (ลองนึกถึงสิ่งของใน Amazon Dash) ที่คุณสามารถใช้เพื่อส่งการแจ้งเตือนไปยังโทรศัพท์ของคุณ (เพื่อขอเติมเครื่องดื่มเมื่อพักผ่อนในสวน เป็นต้น) คุณสามารถกำหนดค่าใหม่เพื่อโต้ตอบกับอุปกรณ์อื่น ๆ ได้อย่างง่ายดาย