其中I2C是作為外部Master裝置(也就是NXT)的控制介面。
而SPI則是Arduino UNO傳送字型資料至RGB LED矩陣控制板進行顯示的傳輸介面。
而SPI則是Arduino UNO傳送字型資料至RGB LED矩陣控制板進行顯示的傳輸介面。
至於結合這兩個介面成為示範影片所展示的效果,則是由Arduino sketches的軟體功能來實現,主要含:
(1) 外部I2C Master的控制功能,含:接收自Master(NXT)傳送的文字字串(Text
string)、自訂字型代碼與字型與背景顏色的設定值等。
(2) 將文字(Text)轉換成字型(Font),含:大小寫英文字母、數字以及部分的標點符號。
(3) 自訂字型,屬於非文字類型的圖案,例如:中文字型。
(4) 跑馬燈效果,在RGB LED矩陣以捲動方式顯示(2)與(3)的字型(Font)。
(1) 外部I2C Master的控制功能,含:接收自Master(NXT)傳送的文字字串(Text
string)、自訂字型代碼與字型與背景顏色的設定值等。
(2) 將文字(Text)轉換成字型(Font),含:大小寫英文字母、數字以及部分的標點符號。
(3) 自訂字型,屬於非文字類型的圖案,例如:中文字型。
(4) 跑馬燈效果,在RGB LED矩陣以捲動方式顯示(2)與(3)的字型(Font)。
程式的功能架構圖:
RGB LED矩陣控制板的顯示功能
Sparkfun的8*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介面
顯示時,則一次依序傳送64bytes資料給RGB LED矩陣的控制板
文字(Text)的顯示方式
如若要顯示紅色,byte值就會是0xE0(b1110 0000),綠色的byte值為0x1C(0001 1100),
而總共會有256種顏色可以選擇。
Arduino使用<SPI.h>程式庫的SPI.transfer()功能,首先,需要先初始化SPI介面
顯示時,則一次依序傳送64bytes資料給RGB LED矩陣的控制板
文字(Text)的顯示方式
在LED矩陣顯示英文字母、數字,需要先製作好字型資料,
對應於LED矩陣 8行*8列的位置與順序,每一個文字以8個byte來組合字型,每一個byte表示一列,每一個bit表示該行(點)位置LED的顯示狀態,此外,因應Arduino有限的SRAM空間,所以字型的每一點顏色都相同,當bit為ON時,會顯示字型顏色,OFF時則顯示背景顏色。
圖案顯示方式
對應於LED矩陣 8行*8列的位置與順序,每一個文字以8個byte來組合字型,每一個byte表示一列,每一個bit表示該行(點)位置LED的顯示狀態,此外,因應Arduino有限的SRAM空間,所以字型的每一點顏色都相同,當bit為ON時,會顯示字型顏色,OFF時則顯示背景顏色。
圖案顯示方式
相較於Text文字,無論中文或圖案都無法如英文或數字,使用預製的字型,需要先自訂好幾個需要顯示的圖形的字型,字型的資料結構與文字一樣,以8個bytes為單位,作為RGB LED 8*8矩陣的顯示控制。
(chineseFont_2)
(chineseFont_2)
跑馬燈效果
從示範影片中可以看到跑馬燈的效果是由右往左捲動顯示,同時,後一個字型會與前一個字型以差距三行的方式同步捲動。
要做到這樣的效果,需要一些程式的技巧,雖然有點挑戰,不過很好玩。
首先,對於LED矩陣,必須要接收到64個bytes去填滿每一點才能夠顯示,
所以要做到捲動效果,就需要像製作動畫一樣,依序且一次送一個分格畫面給LED矩陣去顯示。
把握住這個簡單又值覺得概念,接下來就要設法將字型資料分解成分格畫面,
以顯示文字〝AB〞為例,首先第一個字母〝A〞共會需要拆成 15 格的畫面:
前8個是由右側逐漸將字母〝A〞完整顯現出來的畫格,後7個則是往左側漸漸消失的畫格。
而同時,就在〝A〞還未完全消失前,下一個字母〝B〞的字型就需要與字母〝A〞的後7個畫格重疊出現,這樣就能產生跑馬燈的顯示效果了。
以下就是程式碼的部分:
從示範影片中可以看到跑馬燈的效果是由右往左捲動顯示,同時,後一個字型會與前一個字型以差距三行的方式同步捲動。
要做到這樣的效果,需要一些程式的技巧,雖然有點挑戰,不過很好玩。
首先,對於LED矩陣,必須要接收到64個bytes去填滿每一點才能夠顯示,
所以要做到捲動效果,就需要像製作動畫一樣,依序且一次送一個分格畫面給LED矩陣去顯示。
把握住這個簡單又值覺得概念,接下來就要設法將字型資料分解成分格畫面,
以顯示文字〝AB〞為例,首先第一個字母〝A〞共會需要拆成 15 格的畫面:
前8個是由右側逐漸將字母〝A〞完整顯現出來的畫格,後7個則是往左側漸漸消失的畫格。
而同時,就在〝A〞還未完全消失前,下一個字母〝B〞的字型就需要與字母〝A〞的後7個畫格重疊出現,這樣就能產生跑馬燈的顯示效果了。
以下就是程式碼的部分:
沒有留言:
張貼留言