สารบัญ:

ปุ่มกด 4×4 หนึ่งพิน: 10 ขั้นตอน
ปุ่มกด 4×4 หนึ่งพิน: 10 ขั้นตอน

วีดีโอ: ปุ่มกด 4×4 หนึ่งพิน: 10 ขั้นตอน

วีดีโอ: ปุ่มกด 4×4 หนึ่งพิน: 10 ขั้นตอน
วีดีโอ: USE ONLY 1 PIN TO READ 4 BUTTONS (KC11B04 4X1 AD KEYPAD) - Arduino tutorial #29 2024, พฤศจิกายน
Anonim
ปุ่มกด 4×4 หนึ่งพิน
ปุ่มกด 4×4 หนึ่งพิน

ทุกครั้งที่ฉันเห็นปุ่มกด มันมาพร้อมกับหมุดจำนวนมาก เป็นการสิ้นเปลืองหมุด 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

แผนผังและ Cicruit
แผนผังและ Cicruit
แผนผังและ Cicruit
แผนผังและ 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: จุดจบ

ฉันหวังว่าคุณจะชอบโครงการนี้และพยายามทำมัน บางทีคุณอาจจะทำได้ดีกว่าที่ฉันทำ

ถามฉันหากคุณมีคำถาม แสดงความคิดเห็น และอย่าลืมโหวตให้ฉันหากคุณชอบ

แนะนำ: