使用 Arduino UNO R4 WiFi LED 矩陣|奧斯丁國際有限公司 OURSTEAM Internationl
icon教學資源
2023/09/21

使用 Arduino UNO R4 WiFi LED 矩陣

使用 Arduino UNO R4 WiFi LED 矩陣

使用 Arduino UNO R4 WiFi 內建 LED 矩陣開始工作。學習控制它、創建動畫、圖形甚至遊戲的不同技術。

Arduino UNO R4 WiFi配備內建 12x8 LED 矩陣,可對其進行編程以顯示圖形、動畫、充當介面,甚至可以玩遊戲。

目標
此矩陣及其 API 可以透過幾種不同的方式進行編程,每種方式都適合不同的應用。本指南將引導您了解 LED 矩陣程式設計的基本概念,並幫助您開始創建自己的動畫,同時重點介紹處理 LED 來創建動畫和圖像的兩種不同方法。這使您可以更輕鬆地決定哪種方法最適合您的需求!
 
UNO R4 WiFi LED 矩陣

所需的硬體和軟體初始化矩陣

要使用 LED 矩陣庫,需要將一些內容新增到草圖中才能開始使用。

首先,將庫包含在草圖的頂部,如下所示:

然後,您需要在草圖中建立 LED 矩陣對象,方法是在第一個對象的正下方添加以下行:

最後,透過新增此行來啟動 LED 矩陣void setup():

整件事情應該看起來像這樣;

如何寫框架

UNO R4 WiFi 的 LED 矩陣庫的工作原理是建立一個幀,然後將其載入到顯示該幀的緩衝區中。

幀就是我們所說的在任意給定時刻顯示在矩陣上的“圖像”。如果動畫是一系列圖像,則該幀就是該系列中的其中一個圖像。

為了控制 UNO R4 WiFi 上的 12x8 LED 矩陣,您需要至少 96 位元大小的記憶體空間。該庫提供了兩種方法來做到這一點。

第一個是簡單地建立一個二維位元組數組,如下所示:
 
該選項很容易理解,因為您可以看到陣列圖案中的圖像,並且很容易在運行時進行編輯。上面數組中的那些形成了一顆心,這就是您在螢幕上看到的圖像
 
要定位單一像素,請選擇其位址並變更值,請記住,您需要從 0 開始計數。因此,以下行將定位左側第三個像素和頂部第二個像素,然後將其開啟:

然而,此方法佔用的記憶體超出了所需的記憶體。儘管每個 LED 僅需要一位來儲存其狀態,但您卻使用了八位元(一個位元組)。儲存幀的更節省記憶體的方法是使用 32 位元整數數組。

在本節中,我們將介紹您如何自行建立這些框架之一的過程和概念。儘管我們已經開發了一個可以為您完成此操作的工具,因此如果您想跳過此練習,可以按一下此處

這是同一顆心的這種形式:

unsigned long 變數可保存 32 位,而 96/32 為 3,因此 unsigned long 數組是保存 LED 矩陣所需的所有位的有效方法。

但是這些十六進位值與像素位置有何關係?要找出答案,請將十六進位值轉換為二進位值。這是執行此操作的程式碼片段:

這將列印出數組的所有位值。輸出將如下所示:

不過,此方法並未向您顯示所有內容。每個數組元素應有 32 位元。如果新增零以顯示每個元素的所有 32 位,您將得到:
  
現在將其分成 12 位一組,您就得到了心臟:

提示:如果您透過按 CTRL/command + F 突出顯示頁面上的所有“1”並搜索“1”,您可以更輕鬆 地看到心臟。

 
如果您有多個不同的框架,您可以像這樣載入和顯示它們:
 

測試一下

讓我們透過兩個在板上顯示不同框架的基本草圖來應用這些概念。首先,我們創建 3x32 位元整數幀並一一加載它們。

這是一個草圖,首先將笑臉載入到矩陣上,然後將其變更為心形。
  
草圖非常簡單,但結果非常具有表現力,可以幫助您輕鬆指示專案的狀態。

現在讓我們改變方法並創建一個在運行時更改的點陣圖。此草圖包含多個函數,每個函數都繪製臉部的一部分,然後透過關閉某些像素來使左眼眨眼。
  
滾動文字範例

LED 矩陣現在支援透過ArduinoGraphics庫列印字元。有了它,您能夠:
  • 透過設定文字的起始位置matrix.beginText(x,y, 0xFFFFFF)。“0xFFFFFF”代表預設顏色(紅色)。由於ArduinoGraphics庫支援其他具有多種顏色的硬件,因此我們需要指定它。
  • 透過列印文字matrix.printText("This message is printed")
  • 結束列印並(可選)指定滾動方向matrix.endText(direction)
  • SCROLL_LEFT,SCROLL_RIGHT都支持。如果不需要滾動,請留空。
下面的範例只是印出“Hello World!” 在矩陣上。
  
動畫生成

我們開發了一種工具,用於產生要在瀏覽器中的 LED 矩陣上渲染的幀和動畫。該工具是Arduino 實驗室的一部分,因此被視為實驗軟體。

要使用該工具,您需要上傳以下草圖,允許開發板讀取瀏覽器發送的序列輸入。

您也可以在檔案 > 範例 > LED_Matrix > LivePreview中找到草圖
 
按一下此處前往 LED 矩陣工具。
 

LED 矩陣編輯器

製作完動畫後,您可以從工具中以允許您像前面討論的那樣使用它們的格式匯出它們。

您可以在其網站上找到有關如何使用此工具的更多提示。

結論

在本文中,我們介紹了使用 Arduino UNO R4 WiFi 內建 LED 矩陣的基礎知識,介紹了建立框架和動畫的不同實踐,以及如何將它們加載到板上。

在 UNO R4 WiFi 上享受創建互動式介面或動畫的樂趣!

應用程式介面

要自己編寫更高級的草圖,您可以使用庫的完整 API,如下所示。
會員描述
public  ArduinoLEDMatrix()用於控制LED矩陣的主類。
public void autoscroll(int32_t interval_ms)設定要顯示的每幀的時間(以毫秒為單位)。
public void on(size_t pin)開啟單個像素。
public void off(size_t pin)關閉單一像素。
public void begin()啟動 LED 矩陣。
public void next()手動移至序列中的下一幀。
public void loadFrame(const uint32_t buffer[3])載入不按任何順序排列的新單幀。
public void renderFrame(uint8:t frameNumber)渲染載入的幀。
public void play(bool loop = false)開始播放畫面序列,可以選擇無限循環或播放一次。
public bool sequenceDone()檢查序列是否已完成播放。
public void loadPixels(uint8_t *arr, size_t size)將像素載入到緩衝區中但不顯示它們。
public void loadWrapper(const uint32_t frames[][4], uint32_t howMany callback)將目前影格設定為序列中的編號 0。
 


會員

公共 ArduinoLEDMatrix()

建構一個新的LEDMatrix目的。

公共無效自動滾動(int32_t間隔_毫秒)

啟用自動滾動序列中的訊框。

參數
  • interval_ms設定切換到序列中的下一幀之前應在幀上花費的時間(以毫秒為單位)。
公共無效(size_t pin)

打開單個 LED。

參數
  • pin定義應開啟哪個 LED。接受的值為 0-95。 公共無效關閉(size_t pin)
關閉單一 LED。

參數

pin定義應關閉哪一個 LED。接受的值為 0-95。

公共無效開始()

啟動 LED 矩陣。

公共無效下一個()

手動移至序列中的下一幀。

公用無效loadFrame(const uint32_t緩衝區[3]

載入不屬於序列的單一影格。

參數
  • buffer[3]三個 32 位元整數的數組,其中每個位元代表一個 LED。
公用無效renderFrame(uint8_t幀編號

渲染序列中的特定幀

參數

frameNumber指定應渲染序列的哪一格。
公共無效播放(布爾循環)

開始播放已載入的序列。

參數
  • looptrue 啟用循環序列, false 播放一次。
公共 bool 序列完成()

檢查序列是否已完成播放,或影格是否應前進另一步。

如果序列未完成則傳回false,如果已完成則傳回 true

公無效loadPixels(uint8_t arr,size_t大小)

將像素載入到幀中,但不載入它們。

參數
  • arr指向保存幀的數組的指針
  • size幀中的像素數量。

公共無效loadWrapper(const uint32_t框架[] [4] ,uint32_t howMany)

將目前影格設定為序列中的第 0 格。

原文出處:https://docs.arduino.cc/tutorials/uno-r4-wifi/led-matrix#
logo
iconiconiconiconicon
icon  電話:04-2375-3535
icon  傳真:04-2256-9949
icon  統編:90386785
icon  E-mail:service@oursteam.com.tw
icon  LINE ID:@oursteam
Inspire every child to create