2012-08-11

NXT RGB LED訊息看板(Message Board):(II) 軟體功能

前一篇Arduino UNOSparkfun RGB LED矩陣製作的NXT訊息看板中,所使用的介面分別是I2CSPI
其中I2C是作為外部Master裝置(也就是NXT)的控制介面。
SPI則是Arduino UNO傳送字型資料至RGB LED矩陣控制板進行顯示的傳輸介面。
至於結合這兩個介面成為示範影片所展示的效果,則是由Arduino sketches的軟體功能來實現,主要含:
(1)
外部I2C Master的控制功能,含:接收自Master(NXT)傳送的文字字串(Text
string)
、自訂字型代碼與字型與背景顏色的設定值等。

(2)
將文字(Text)轉換成字型(Font),含:大小寫英文字母、數字以及部分的標點符號。
(3)
自訂字型,屬於非文字類型的圖案,例如:中文字型。
(4)
跑馬燈效果,RGB LED矩陣以捲動方式顯示(2)(3)的字型(Font)
程式的功能架構圖:

RGB LED矩陣控制板的功能
Sparkfun8*8 RGB LED矩陣由控制板的SPI介面接收資料顯示,CS訊號為LOW時,就會經由MOSI腳位一次讀取64 bytes的資料,資料串流對應LED矩陣位置的順序為:由左而右,由下而上。
每一byte的值為LED顯示的顏色,顏色值的設定格式為:
如若要顯示紅色,byte值就會是0xE0(b1110 0000),綠色的byte值為0x1C(0001 1100)

而總共會有256種顏色可以選擇。
Arduino
使用<SPI.h>程式庫的SPI.transfer()功能,首先,需要先初始化SPI介面
顯示時,則一次依序傳送64
bytes資料給RGB LED矩陣的控制板

文字
(Text)的顯示方式
LED矩陣顯示英文字母、數字,需要先製作好字型資料,

對應於LED矩陣 8*8列的位置與順序,每一個文字以8byte來組合字型,
每一個byte表示一列,每一個bit表示該行()位置LED的顯示狀態,此外,因應Arduino有限的SRAM空間,所以字型的每一點顏色都相同,bitON時,會顯示字型顏色,OFF時則顯示背景顏色。


圖案顯示方式
相較於Text文字,無論中文或圖案都無法如英文或數字,使用預製的字型,需要先自訂好幾個需要顯示的圖形的字型,字型的資料結構與文字一樣,以8bytes為單位,作為RGB LED 8*8矩陣的顯示控制。


(chineseFont_2)


跑馬燈效果
從示範影片中可以看到跑馬燈的效果是由右往左捲動顯示,同時,後一個字型會與前一個字型以差距三行的方式同步捲動。
要做到這樣的效果,需要一些程式的技巧,雖然有點挑戰,不過很好玩。
首先,對於LED矩陣,必須要接收到64bytes去填滿每一點才能夠顯示,
所以要做到捲動效果,就需要像製作動畫一樣,依序且一次送一個分格畫面給LED矩陣去顯示
把握住這個簡單又值覺得概念,接下來就要設法將字型資料分解成分格畫面
以顯示文字〝AB〞為例,首先第一個字母〝A〞共會需要拆成 15 格的畫面:
8個是由右側逐漸將字母〝A〞完整顯現出來的畫格,後7個則是往左側漸漸消失的畫格。
而同時,就在〝A〞還未完全消失前,下一個字母〝B〞的字型就需要與字母〝A〞的後7個畫格重疊出現,這樣就能產生跑馬燈的顯示效果了。
以下就是程式碼的部分:


沒有留言:

張貼留言