2018年4月13日 星期五

模組介紹 : faya串列全彩LED模組 (使用fastLED函式庫)


學習目標 : 利用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>
         引入I2C 的函示庫
  • CRGB 物件名稱[NUM_LEDS]
        建構物件,物件名稱可自訂,括弧中的參數NUM_LED為串接的LED數量
  •   FastLED.addLeds<WS2812B, DATA_PIN, RGB>(faya_colorSticker, NUM_LEDS);  
      設定串列全彩LED參數,其中
      WS2812B : 控制LED模組的晶片型號,其他可支援的型號請參考函式庫說明
      DATA_PIN : 控制LED模組的資料腳位
      RGB : 控制LED模組RGB三原色的順序,須根據所連接的訊號線路調整
  •   FastLED.setBrightness(BRIGHTNESS);
      設定串列LED的亮度 (BRIGHTNESS範圍 : 0~255)
  • 類別名稱[i] = CRGB(R值, G值, B值); 
     利用RGB顏色模型概念,設定第i顆LED的顏色,參數範圍如下
     R值 : 0~255
     G值 : 0~255
     B值 : 0~255
  •  類別名稱[i] = CHSV(H值, S值, V值);  
     利用HSV顏色模型概念,設定第i顆LED的顏色,參數範圍如下,參數原理解釋在範例裡
     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();
      點亮已設定好顏色的LED
  • FastLED.clear();
     熄滅所有的LED
===================範例實作(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裡,依樣畫葫蘆地學習其它函式的使用方式。


歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================



沒有留言:

張貼留言