學習目標 : 利用fastLED函式庫控制faya串列全彩LED模組
學習時間 : 60min
示範模組 : (1) faya brickNano
(2) faya串列全彩LED模組x2
工具 : (1) 樂高底板(相容)
====================背景知識====================
我們在先前的文章 [模組介紹 : faya串列全彩LED模組] 詳細的介紹了faya串列全彩LED模組的原理和操作方式,並且透過adafruit的[NeoPixel]函式庫,經由設定RGB三原色的比例,精準的控制每顆LED的顏色。
這篇教學文章介紹另一個強大且好用的函式庫 [fastLED],也能夠很快速的控制串列全彩系列的LED模組,我們會在這篇文章介紹幾個好用的函式,引導大家使用這個函式庫。
<fastLED> 所使用的指令如下 [下載點]
- #include <fastLED.h>
- CRGB 物件名稱[NUM_LEDS]
- FastLED.addLeds<WS2812B, DATA_PIN, RGB>(faya_colorSticker, NUM_LEDS);
WS2812B : 控制LED模組的晶片型號,其他可支援的型號請參考函式庫說明
DATA_PIN : 控制LED模組的資料腳位
RGB : 控制LED模組RGB三原色的順序,須根據所連接的訊號線路調整
- FastLED.setBrightness(BRIGHTNESS);
- 類別名稱[i] = CRGB(R值, G值, B值);
R值 : 0~255
G值 : 0~255
B值 : 0~255
- 類別名稱[i] = CHSV(H值, S值, V值);
i : 選擇第i顆LED
H值 : 色相 (Hue) 0~255
S值 : 飽和度(Saturation) 0 ~ 255
V值 : 色調 (Value) 0~255
- faya_colorSticker[i] = CHSV(led_cnt*4, 255, 255-+led_cnt); //決定第i顆的顏色
- FastLED.show();
- FastLED.clear();
===================範例實作(3)===================
範例實作(1)(2)請參考 [模組介紹 : faya串列全彩LED模組]
目標:
(1) 利用2組faya串列全彩LED模組依序顯示16種顏色的跑馬燈效果
(2) 此實作結果和範例實作(2)完全相同,但函式庫由neoPiexel改成fastLED
(3) 利用fastLED中的CRGB函式控制LED顏色
接線:
(1) 電源線連接
如下圖所示,我們可以用faya-母對母電源線,外加兩條單心線,從brickNano的電源座提供5V電源給模組,千萬記得紅色的電源線接到VCC,黑色的電源線接到GND。
(2) 訊號線連接
如下圖所示,brickNano的D2腳位接到第一組串列LED模組的Din(D2=>Din),接著把第一組的Dout埠和第二組的Din埠用單心線串起來(圖中為黃色線材)。
範例程式:
範例結果:
備註:
- 這個程式碼的架構和範例實作(2)完全相同,利用建表的方式,先把顏色數據建好,再透過迴圈依序讀取表格中顏色的數據,減少冗長的程式碼。
- L34 : setBrightness裡的參數可以從0~255,大家可以依據應用填入不同的強度值,近看時30就很亮了,強度較高時請勿用眼睛直視。
- L15 : 程式利用Arduino Loop的功能,周而復始的輪流顯示16種顏色,顏色的RGB成分配置參考如陣列中所式,大家可以根據自己的喜好修改。
-RGB的顏色模型將每個像素分解成R、G、B三原色,因此當我們指定每個原色的成分(0~255)後,最後會得到下圖中正方體中的其中一點的顏色。
===================範例實作(4)===================
目標:
(1) 利用2組faya串列全彩LED模組依序顯示16種顏色的跑馬燈效果
(2) 利用fastLED中的CHSV函式控制LED顏色
接線:
和範例實作(3)相同
範例程式:
範例結果:
備註:
- HSV模型同樣可以用來定義一個點的顏色,和RGB不同的是,HSV模型用H (Hue) 色相/ S (Saturation) 飽和度 / V (Value)色調來定義一的點的顏色,把HSV的成分攤開時會得到類似如本篇文章第一張圖的圓柱體,但是由於色調(V)為0時,最底面為全黑,可用一黑點表示,因此看起來像一個如下圖的圓錐體。同樣的,HSV的成份可設定0~255的強度。
- L31 : H值從0秀到255時,顏色會從紅橙黃綠....藍靛紫如讓圖所示
- L32 : S值從0秀到255時,顏色會愈來愈飽和
- L33 : V值從0秀到255時,顏色會愈來愈亮
討論:
- 大家有沒有發現用fastLED的CHSV函式,設定顏色變得很簡單呢? 當我們利用CRGB函示時,需另外建立顏色陣列去讀取,使用CHSV函式值不但把這個步驟省略了,也剩下了程式記憶體的空間。
- 底下順便提供RGB和HSV的轉換表格給大家參考
- fastLED函式庫裡還有很多有功能強大的函式,例如 [fill_rainbow] 、[fadeToBlackBy],有興趣的人可以在fastLED的examples裡,依樣畫葫蘆地學習其它函式的使用方式。
歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
沒有留言:
張貼留言