เมนู Arduino บนจอ LCD Nokia 5110 โดยใช้เครื่องเข้ารหัสแบบหมุน: 6 ขั้นตอน (พร้อมรูปภาพ)
เมนู Arduino บนจอ LCD Nokia 5110 โดยใช้เครื่องเข้ารหัสแบบหมุน: 6 ขั้นตอน (พร้อมรูปภาพ)
Anonim
Image
Image
เมนู Arduino บน LCD Nokia 5110 โดยใช้ Rotary Encoder
เมนู Arduino บน LCD Nokia 5110 โดยใช้ Rotary Encoder

เพื่อนๆที่รักยินดีต้อนรับสู่การกวดวิชาอื่น! ในวิดีโอนี้ เราจะมาเรียนรู้วิธีสร้างเมนูของเราเองสำหรับจอแสดงผล Nokia 5110 LCD ยอดนิยม เพื่อทำให้โปรเจ็กต์ของเราเป็นมิตรกับผู้ใช้และมีความสามารถมากขึ้น มาเริ่มกันเลย!

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

ตอนนี้เรามาดูวิธีการสร้างโครงการนี้กัน

ขั้นตอนที่ 1: รับชิ้นส่วนทั้งหมด

รับอะไหล่ทั้งหมด
รับอะไหล่ทั้งหมด

ชิ้นส่วนที่จำเป็นในการสร้างโครงการนี้มีดังต่อไปนี้:

  • Arduino Uno ▶
  • จอ LCD ของ Nokia 5110 ▶
  • ตัวเข้ารหัสแบบหมุน ▶
  • เขียงหั่นขนมขนาดเล็ก ▶
  • บางสาย ▶
  • พาวเวอร์แบงค์ ▶

ต้นทุนของโครงการต่ำมาก น้อยกว่า $10 คุณสามารถค้นหาลิงก์สำหรับส่วนทั้งหมดที่ฉันใช้ในคำอธิบายของวิดีโอด้านล่าง

ขั้นตอนที่ 2: จอแสดงผล LCD ของ Nokia 5110

Image
Image
การสร้างโครงการ
การสร้างโครงการ

Nokia 5110 คือจอแสดงผลที่ฉันโปรดปรานสำหรับโปรเจ็กต์ Arduino ของฉัน

Nokia 5110 เป็นหน้าจอ LCD แบบกราฟิกพื้นฐานซึ่งเดิมมีไว้สำหรับเป็นหน้าจอโทรศัพท์มือถือ ใช้คอนโทรลเลอร์ PCD8544 ซึ่งเป็นคอนโทรลเลอร์/ไดรเวอร์ CMOS LCD พลังงานต่ำ ด้วยเหตุนี้จอแสดงผลนี้จึงมีการใช้พลังงานที่น่าประทับใจ ใช้เพียง 0.4mA เมื่อเปิดเครื่อง แต่ปิดไฟแบ็คไลท์ ใช้น้อยกว่า 0.06mA เมื่ออยู่ในโหมดสลีป! นั่นเป็นเหตุผลหนึ่งที่ทำให้จอแสดงผลนี้เป็นที่ชื่นชอบ PCD8544 เชื่อมต่อกับไมโครคอนโทรลเลอร์ผ่านอินเตอร์เฟสบัสอนุกรม นั่นทำให้จอแสดงผลใช้งานง่ายมากกับ Arduino คุณต้องเชื่อมต่อสายไฟ 8 เส้นเท่านั้น

ฉันได้เตรียมการสอนโดยละเอียดเกี่ยวกับวิธีใช้จอแสดงผล Nokia 5110 LCD กับ Arduino ฉันได้แนบวิดีโอนั้นในคำแนะนำนี้ ซึ่งจะให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับการแสดงผล ดังนั้นฉันขอแนะนำให้คุณดูอย่างระมัดระวัง ค่าใช้จ่ายของจอแสดงผลอยู่ที่ประมาณ 4 เหรียญ

คุณสามารถรับได้ที่นี่: ▶

ขั้นตอนที่ 3: ตัวเข้ารหัสแบบหมุน

Image
Image

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

เครื่องเข้ารหัสแบบโรตารี่ที่เราจะใช้ในโครงการนี้เป็นเครื่องเข้ารหัสที่มีราคาไม่แพงมาก นอกจากนี้ยังมีปุ่มฝังอยู่และเพื่อให้ใช้งานได้ เราจำเป็นต้องเชื่อมต่อสายไฟเพียง 5 เส้นเท่านั้น ฉันได้เตรียมการสอนโดยละเอียดเกี่ยวกับวิธีใช้เครื่องเข้ารหัสแบบหมุนแล้ว คุณสามารถแนบวิดีโอนี้ได้ที่นี่

ค่าใช้จ่ายของตัวเข้ารหัสแบบหมุนนี้ต่ำมาก มีค่าใช้จ่ายประมาณ 1.5 เหรียญ

สามารถดาวน์โหลดได้ที่นี่ ▶

ขั้นตอนที่ 4: การสร้างโครงการ

Image
Image
การสร้างโครงการ
การสร้างโครงการ
การสร้างโครงการ
การสร้างโครงการ

ตอนนี้มาเชื่อมต่อทุกส่วนเข้าด้วยกัน ก่อนสร้างโครงการนี้ หากคุณไม่เคยใช้เครื่องเข้ารหัสแบบโรตารี่มาก่อน เราขอแนะนำให้คุณดูบทช่วยสอนที่ฉันเตรียมไว้เกี่ยวกับเครื่องเข้ารหัสแบบหมุน มันจะช่วยให้คุณเข้าใจว่าโรตารีเอ็นโค้ดเดอร์ทำงานอย่างไร และคุณจะได้รับประสบการณ์บางอย่างกับมัน วิดีโอนี้แนบมาที่นี่

ฉันได้วางจอแสดงผลไว้บนเขียงหั่นขนมขนาดเล็กเช่นนี้ มาเชื่อมต่อจอภาพกันก่อน พินแรกของจอแสดงผลซึ่งถูกรีเซ็ตไปที่พินดิจิตอล 3 ของ Arduino Uno พินที่สองไปที่พินดิจิทัล 4 พินที่สามไปที่พินดิจิตอล 5 พินที่สี่ถึงพินดิจิตอล 11 และพินที่ห้าเป็นดิจิตอล พิน 13 พินถัดไปคือ Vcc เราเชื่อมต่อ Vcc กับรางบวกของเขียงหั่นขนมและรางบวกของเขียงหั่นขนมกับเอาต์พุต 3.3V ของ Arduino หมุดถัดไปคือแบ็คไลท์สำหรับจอแสดงผล เนื่องจากเราต้องการควบคุมผ่านซอฟต์แวร์ เราจึงเชื่อมต่อกับพินดิจิทัล 7 พินสุดท้ายคือ GND เราเชื่อมต่อ GND กับรางลบของเขียงหั่นขนมและรางลบของเขียงหั่นขนมกับ Arduino GND

ตอนนี้ ทั้งหมดที่เราต้องทำคือเชื่อมต่อเครื่องเข้ารหัสแบบโรตารี่ พินแรกคือ GND และเราเชื่อมต่อกับรางลบของเขียงหั่นขนม พินถัดไปคือ Vcc และเราเชื่อมต่อกับรางบวกของเขียงหั่นขนม พินถัดไปคือ SW และเราเชื่อมต่อกับ Analog Pin 2 พินถัดไปชื่อ DT และเราเชื่อมต่อกับ Analog Pin 1 สุดท้ายพิน CLK เชื่อมต่อกับ Analog Pin 0 คุณสามารถค้นหาแผนผังของโครงการนี้ใน คำอธิบายของวิดีโอด้านล่าง

ตอนนี้เราพร้อมที่จะเพิ่มพลังให้กับโครงการแล้ว อย่างที่คุณเห็น โปรเจ็กต์ทำงานได้ดี และเมนูทำงานตามที่คาดไว้! เยี่ยมมาก ตอนนี้มาดูซอฟต์แวร์ของโครงการกัน

ขั้นตอนที่ 5: รหัสของโครงการ

รหัสโครงการ
รหัสโครงการ

ในโครงการนี้เราใช้ห้องสมุด 4 แห่ง เราใช้ไลบรารีสองไลบรารีสำหรับการแสดงผล และสองไลบรารีสำหรับเครื่องเข้ารหัสแบบหมุน

  1. Adafruit GFX:
  2. โนเกีย 5110:
  3. ไลบรารีตัวเข้ารหัส:
  4. ห้องสมุด TimerOne:

ขั้นแรกเราจะมาดูฟังก์ชัน drawMenu ฟังก์ชันนี้มีหน้าที่ในการวาดเมนูบนจอแสดงผล ฟังก์ชันนี้เรียกว่าทุกๆ สองสามมิลลิวินาที ดังนั้นหากมีการเปลี่ยนแปลงในเมนู ฟังก์ชันนี้จะมีหน้าที่ในการอัปเดตเมนูบนหน้าจอ

int menuitem = 1; เฟรม int = 1; หน้า int = 1; int lastMenuItem = 1;

นอกจากนี้ยังมีตัวแปรส่วนกลางที่สำคัญมาก 3 ตัว ได้แก่ หน้าตัวแปร รายการเมนูตัวแปร และเฟรมตัวแปร หน้าตัวแปรจะจดจำหน้าจอ UI ใดที่แสดงบนหน้าจอ ดังนั้น หากตัวแปรหน้าเป็น 1 แสดงว่าเราอยู่ในหน้าจอ UI หลัก และหากตัวแปรเป็น 2 เราอยู่ในหน้าจอ UI รองที่เราตั้งค่าให้กับตัวแปร รายการเมนูจะจำรายการเมนูที่เลือก ดังนั้น หากค่าของมันคือ 1 รายการเมนูแรกจะถูกเลือก ดังนั้นฟังก์ชัน drawMenu จะต้องวาดรายการเมนูนี้เป็นสีดำพร้อมตัวอักษรสีขาว หากรายการเมนูเป็น 2 รายการเมนูที่สองจะถูกเลือกเป็นต้น ตัวแปรเฟรมจะจดจำส่วนใดของเมนูที่แสดงบนหน้าจอ เนื่องจากเมนูที่เราสร้างมี 6 รายการ และเราสามารถแสดงได้ครั้งละ 3 รายการเท่านั้น เราจำเป็นต้องรู้ว่ารายการใดบ้างที่แสดงบนหน้าจอ ตัวแปรเฟรมบอกเราอย่างนี้ หากตัวแปรเฟรมมีค่าเป็น 1 เราจะแสดงรายการเมนูสามรายการแรก หากเป็น 2 เราจะแสดงรายการที่ 2, 3, 4 และอื่นๆ

ฉันพยายามทำให้โค้ดแก้ไขได้ง่ายที่สุด ดังนั้นฉันจึงได้สร้างตัวแปรส่วนกลางบางตัวที่มีชื่อสำหรับรายการเมนู ด้วยวิธีนี้ คุณสามารถสร้างเมนูของคุณเองได้อย่างง่ายดายโดยไม่ต้องค้นหาในโค้ด

String menuItem1 = "ความเปรียบต่าง";String menuItem2 = "ระดับเสียง"; สตริง menuItem3 = "ภาษา"; String menuItem4 = "ความยากลำบาก"; String menuItem5 = "ไฟ: เปิด"; สตริง menuItem6 = "รีเซ็ต";

ไฟแบ็คไลท์บูลีน = จริง;

ตรงกันข้าม = 60; ปริมาณ int = 50;

ภาษาสตริง[3] = { "EN", "ES", "EL" };

int เลือกภาษา = 0;

ความยากของสตริง[2] = { "ง่าย", "ยาก" };

int ที่เลือกยาก = 0;

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

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

ขั้นตอนที่ 6: การทดสอบโครงการ

ทดสอบโครงการ
ทดสอบโครงการ

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

ตอนนี้เรารู้วิธีสร้างเมนูสำหรับจอแสดงผล LCD ของ Nokia 5110 แล้ว เราสามารถเพิ่มคุณสมบัติต่างๆ ให้กับโปรเจ็กต์ของเราและทำให้ใช้งานได้ง่ายยิ่งขึ้น เมนูง่าย ๆ ที่เราสร้างขึ้นในวันนี้สามารถปรับปรุงได้ เราสามารถใช้อินเตอร์รัปต์แทนการตรวจสอบสถานะของปุ่มได้ตลอดเวลา ด้วยวิธีนี้ เราสามารถลดการใช้พลังงานของโครงการและทำให้โค้ดสะอาดขึ้น ฉันจะเตรียมวิดีโอเกี่ยวกับการขัดจังหวะในเร็วๆ นี้ โปรดคอยติดตาม ฉันชอบที่จะได้ยินความคิดเห็นของคุณเกี่ยวกับโครงการเมนูนี้ คุณคิดว่ามันมีประโยชน์หรือไม่และคุณวางแผนที่จะใช้เมนูในโครงการของคุณหรือไม่ กรุณาโพสต์ความคิดและความคิดของคุณด้านล่าง ขอบคุณ!

แนะนำ: