Using the Arduino UNO R4 WiFi LED Matrix

Started by tha, October 24, 2023, 02:30:12 PM

Previous topic - Next topic

tha

https://docs.arduino.cc/tutorials/uno-r4-wifi/led-matrix

Using the Arduino UNO R4 WiFi LED Matrix

เริ่มต้นใช้งานด้วย the Arduino UNO R4 WiFi built-in LED matrix. เรียนรู้เทคนิคต่างๆ ในการควบคุมมัน สร้างแอนิเมชั่น กราฟิก หรือแม้แต่เกม

AUTHOR: Jacob Hylén & Tom Igoe

The Arduino UNO R4 WiFi มาพร้อมกับ a built in 12x8 LED Matrix, ซึ่งสามารถถูกโปรแกรมให้แสดง graphics, animations, ทำหน้าที่เป็น an interface, หรือแม้แต่เล่นเกมได้.

tha

Goals

The matrix และ API ของมันได้รับการพัฒนาเพื่อให้สามารถถูกโปรแกรมด้วยวิธีที่แตกต่างกันสองสามวิธี ซึ่งแต่ละวิธีเหมาะสำหรับการใช้งานที่แตกต่างกัน คู่มือนี้จะอธิบายแนวคิดพื้นฐานสำหรับการเขียนโปรแกรม the LED matrix, และช่วยให้คุณเริ่มต้นสร้างภาพเคลื่อนไหวของคุณเอง พร้อมเน้นสองวิธีที่แตกต่างกันในการจัดการกับ LED เพื่อสร้างภาพเคลื่อนไหวและรูปภาพ นี้ทำให้มันง่ายสำหรับคุณตัดสินใจได้ว่าวิธีใดที่เหมาะกับความต้องการของคุณที่สุด!


tha

Hardware & Software Needed

  •  Arduino UNO R4 WiFi
  •  UNO R4 Core (latest version)
  •  Arduino IDE

Initializing Matrix

เพื่อใช้ the LED Matrix library, มีบางสิ่งที่จำเป็นต้องถูกเพิ่มลงใน sketch ของคุณเพื่อเริ่มต้นการใช้งาน

ขั้นแรก รวม the library ไว้ที่ด้านบนของ sketch ของคุณ ดังนี้:


จากนั้น คุณจำเป็นต้องสร้าง a LED Matrix object  ใน sketch ของคุณ โดยเพิ่มบรรทัดต่อไปนี้ไว้ใต้บรรทัดแรก:


และสุดท้ายให้เริ่ม LED Matrix โดยเพิ่มบรรทัดนี้ใน void setup():


สิ่งทั้งหมดควรมีลักษณะเช่นนี้


tha

How to Write a Frame

The LED Matrix library สำหรับ the UNO R4 WiFi ทำงานบนหลักการสร้าง a frame, จากนั้นโหลดมันลงในบัฟเฟอร์ซึ่งแสดง a frame.

A frame คือสิ่งที่เราเรียกว่า "รูปภาพ" ที่แสดง ณ เวลาใดก็ตามบน  the matrix. หากภาพเคลื่อนไหวเป็นชุดรูปภาพ  a frame จะเป็นหนึ่งในรูปภาพเหล่านั้นในชุดนั้น

เพื่อควบคุม the 12x8 LED matrix บน the UNO R4 WiFi, คุณต้องมีพื้นที่ในหน่วยความจำที่มีขนาดอย่างน้อย 96 บิต The library จัดให้มีสองวิธีในการดำเนินการนี้

อย่างแรกคือสร้างง่ายๆ a two-dimensional array of bytes ดังนี้:


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

tha

หากต้องการกำหนดเป้าหมายแต่ละพิกเซล คุณเลือก address ของมันและเปลี่ยนค่า โปรดจำไว้ว่าคุณจะต้องเริ่มนับที่ 0 ดังนั้น บรรทัดต่อไปนี้จะกำหนดเป้าหมายพิกเซลที่สามจากด้านซ้ายและพิกเซลที่สองจากด้านบน จากนั้นจึงเปิดมัน : :


อย่างไรก็ตาม วิธีการนี้ใช้หน่วยความจำมากกว่าที่จำเป็น แม้ว่า LED แต่ละตัวต้องการเพียงบิตเดียวในการจัดเก็บสถานะของมัน แต่คุณใช้แปดบิต (ไบต์) วิธีที่มีประสิทธิภาพหน่วยความจำมากขึ้นในการจัดเก็บเฟรมคือการใช้อาร์เรย์ของ 32-bit integers.

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

นี่คือหัวใจเดียวกันในรูปแบบนั้น:


ตัวแปร unsigned long จะเก็บ 32 bits, และ 96/32 คือ 3, ดังนั้น an unsigned long array จึงเป็นวิธีที่มีประสิทธิภาพในการเก็บบิตทั้งหมดที่คุณต้องการสำหรับ the LED matrix.

tha

แต่ค่าเลขฐานสิบหกเหล่านั้นสัมพันธ์กับตำแหน่งของพิกเซลอย่างไร หากต้องการทราบ ให้แปลงค่าเลขฐานสิบหกเป็นค่าไบนารี นี่คือ a code snippet ที่จะทำสิ่งนี้:


สิ่งนี้จะ print out ทุุก the bit values ของ the array. The output จะดูเป็นอย่างนี้:


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


ตอนนี้แบ่งมันออกเป็นกลุ่ม ๆละ 12 บิตแล้วคุณจะได้หัวใจกลับมา:


คำแนะนำ: คุณสามารถมองเห็นหัวใจได้ง่ายขึ้นหากคุณไฮไลต์ "1" ทั้งหมดบน the page โดยกด CTRL/command + F แล้วค้นหา "1"

หากคุณมีเฟรมที่แตกต่างกันหลายเฟรม คุณสามารถโหลดและแสดงเฟรมได้ดังนี้:


tha

Testing It Out

ลองใช้แนวคิดเหล่านี้ด้วย 2 basic sketches ที่แสดงเฟรมที่แตกต่างกันบนบอร์ดของคุณ ขั้นแรก เรามาสร้าง 3x32-bit integer frames แล้วโหลดพวกมันทีละเฟรม

นี่คือ sketch ที่จะโหลดหน้ายิ้มบนเมทริกซ์ของคุณก่อน แล้วจึงเปลี่ยนเป็นรูปหัวใจ



The sketch ค่อนข้างเรียบง่าย และแต่ผลลัพธ์ก็แสดงออกได้ชัดเจนมาก และสามารถช่วยให้คุณแสดงสถานะของโปรเจ็กต์ของคุณได้อย่างง่ายดาย

ตอนนี้เรามาเปลี่ยนวิธีการและสร้างบิตแมปที่เราเปลี่ยนแปลงในรันไทม์ sketch นี้รวมฟังก์ชันหลายอย่างที่แต่ละส่วนจะวาดส่วนหนึ่งของใบหน้า จากนั้นขยิบตาข้างซ้ายโดยปิดพิกเซลบางส่วน



tha

Scrolling Text Example

ขณะนี้ LED Matrix รองรับการพิมพ์อักขระผ่านไลบรารี ArduinoGraphics ด้วยสิ่งนี้ คุณสามารถ:
  •  ตั้งค่าตำแหน่งเริ่มต้นสำหรับข้อความผ่าน matrix.beginText(x,y, 0xFFFFFF) "0xFFFFFF" แสดงถึงสีเริ่มต้น (สีแดง) เนื่องจากไลบรารี
     ArduinoGraphics รองรับฮาร์ดแวร์อื่นๆ ที่มีหลายสี เราจึงต้องระบุสีดังกล่าว
  •  พิมพ์ข้อความผ่าน matrix.printText("ข้อความนี้ถูกพิมพ์")
  •  สิ้นสุดการพิมพ์และ (เป็นทางเลือก) ระบุทิศทางการเลื่อนด้วย matrix.endText(direction)
  •  SCROLL_LEFT, SCROLL_RIGHT ถูกรองรับ เว้นว่างไว้หากไม่ต้องการเลื่อน

ตัวอย่างด้านล่างนี้พิมพ์ว่า "Hello World!" บนเมทริกซ์