這回將介紹LED模組的各種變化,除了持續發出單一顏色的光之外,它還有好幾種閃爍方式,並且可以隨喜好調配出想要的顏色,我們將利用這個模組製作一個紅綠燈。在開始動手做之前,這一節我們先來了解LED模組可以做什麼,以及要如何用C#來控制它。 multicolorLed module(有些地方會寫成Smart MulticolorLed Module)指的是彩色LED模組,它裏頭有紅(Red,簡稱R)、綠(Green,簡稱G)、藍(Blue,簡稱B)三色的LED燈,因此可以隨喜好調配出各種顏色。
除了靜態的顏色呈現外,該模組還能動態的閃爍、或者是淡出色彩。
接下來要向您介紹LED模組的各項功能,首先是靜態呈現的部分:
1. 發紅、綠、藍光: multicolorLed.TurnRed(); multicolorLed.TurnGreen(); multicolorLed.TurnBlue(); RGB單色呈現。
2. 發白光: multicolorLed.TurnWhite(); RGB三燈齊開,此時會停止原先的動態閃爍過程。
3. 熄滅LED燈: multicolorLed.TurnOff();
4. 自訂發光色彩: multicolorLed.TurnColor(GT.Color.FromRGB(R, G, B)); 依照紅綠藍三色比例自行配色,上式中的R、G、B分別為紅、綠、藍色的數值,範圍從0-255。
5. 增加RGB某色強度: multicolorLed.AddRed(); multicolorLed.AddGreen(); multicolorLed.AddBlue(); 開啟RGB某一色的燈,相當於直接將RGB某一色的強度增到最大(數值255)。
6. 減小RGB某色強度: multicolorLed.RemoveRed(); multicolorLed.RemoveGreen(); multicolorLed.RemoveBlue(); 關閉RGB某一色的燈,相當於直接將RGB某一色的強度調到最小(數值0)。
7. RGB強度設定: multicolorLed.SetRedIntensity(x); multicolorLed.SetGreenIntensity(x); multicolorLed.SetBlueIntensity(x); 設定RGB單一顏色的強度,上式中的x為LED燈的強度,數值範圍從0-255。
8. 取得目前顏色: GT.Color mycolor = multicolorLed.GetCurrentColor(); 定義一個新的顏色型態,名稱為「mycolor」,或者其他您喜歡的變數名稱;顏色內容則為程式進行至此時LED燈RGB強度。
***************************************************************************************
小提醒: 由於組裝上的失誤,有些LED模組的藍色及綠色是配置顛倒的,這時只要在void ProgramStarted{}內加上一句 multicolorLed.GreenBlueSwapped = true; 就可以解決這個問題了。
*************************************************************************************** 接下來是動態呈現部分,這邊又分直接切換顏色的閃爍(Blink)模式,以及逐漸將顏色變淡的褪出(Fade)模式。
1. 單次閃爍(BlinkOnce) multicolorLed.BlinkOnce(GT.Color.c); 上式中的c代表的是顏色,可能為系統預設的R、G、B、Cray、Magenta等,或者是你自訂的顏色(可利用GT.Color.FromRGB(R, G, B))。 預設為顏色c出現一秒後熄燈,若想調整亮燈的時間,可使用:
multicolorLed.BlinkOnce(GT.Color.c, myTimeSpan);
上式中c為自己設定的顏色,myTimeSpan則為自行定義的時間長度,
我們用下面這個式子來定義時間: TimeSpan myTimeSpan = new TimeSpan(H,M,S);
上式中的myTimeSpan為自行定義的時間長度型態名稱,您也可以使用較簡短、或是自己喜歡的命名方式,式中的H、M、S則分別對應您要定義的小時(Hours)、分鐘(Minutes)、秒(Seconds)數值,C#還有另外四種不同定義時間長度的方式,您可以參考編譯過程中C#出現的文字說明。
另外要注意的是,自訂時間長度的定義必須放在此變數使用之前。
單次閃爍的最後一個變化是在閃爍完後直接切換為另一顏色:
multicolorLed.BlinkOnce(GT.Color.c1,myTimeSpan, GT.Color.c2);
式中的c1、c2代表色彩,myTimeSpan則是自行定義的時間長度,這種模式中並不會出現閃爍後的空白期,而是直接切為另一顏色,如果沒有再另做設定的話,LED便會維持c2的顏色。
2. 重複閃爍(BlinkRepeatedly) multicolorLed.BlinkRepetedly(GT.Color.c); 式中的c為顏色,預設為c顏色重複亮一秒後停一秒這個動作。 重複閃爍的進階模式是同時閃爍兩種顏色,這時並不會有顏色切換過程中的空白期,我們也可以自行調整亮滅時間間距:
multicolorLed.BlinkRepetedly(GT.Color.c1, myTimeSpan1, GT.Color.c2, myTimeSpan2);
式中的c1、c2代表色彩,myTimeSpan1、myTimeSpan2則是自行定義的時間長度。
3. 單次淡出(FadeOnce) multicolorLed.FadeOnce(GT.Color.c);
式中的c是顏色,預設為該色在一秒內亮度由最亮到最小,進而熄滅。若想調整該變化的時間,可使用:
multicolorLed.BlinkOnce(GT.Color.c, myTimeSpan);
式中c為顏色,myTimeSpan則為自行定義的時間長度。
單次淡出的最後一個變化是在閃爍完後直接切換為 另一顏色:
multicolorLed.BlinkOnce(GT.Color.c1,myTimeSpan, GT.Color.c2);
式中的c1、c2代表色彩,myTimeSpan則是自行定義的時間長度。該程式開始運行後,顏色c1會於myTimeSpan的時間內漸漸變淡,並逐漸消失;
而顏色c2則會在myTimeSpan的時間內漸漸加強,並達到最大值,也就是說,這種模式可以讓顏色漸進式的轉換,並達成混色的效果;如果沒有再另做設定的話, LED便會維持顏色c2。
4. 重複淡出(FadeRepeatedly) multicolorLed.FadeRepetedly(GT.Color.c);
式中的c為顏色,預設為c顏色在一秒內逐漸變深至最亮,在於一秒內逐漸減弱至熄滅,並重複這個動作。 重複淡出的進階模式是同時閃爍兩種顏色,並可以自行調整亮滅時間間距,:
multicolorLed.FadeRepetedly(GT.Color.c1, myTimeSpan1, GT.Color.c2, myTimeSpan2);
式中的c1、c2代表色彩,myTimeSpan1、myTimeSpan2則是自行定義的時間長度。程式開始運行後,顏色c1會於myTimeSpan1的時間內漸漸變淡,並逐漸消失、而顏色c2則會在myTimeSpan的時間內逐漸加深至最強,接下來myTimeSpan2的時間內,顏色c1、c2的效果會顛倒,也就是這兩色會重複漸進式的轉換這,並有混色的效果,另外要注意光線的混色效果與一般您所熟悉的顏料混色效果並不盡相同。
本章範例使用的硬體如下:
1. FEZ Spider主板
2. Mini USB線用來連接電腦
3. USB供電板
4. LED模組
本段將介紹如何新增一個Gadgeteer應用程式,並新增LED模組,使用紅色、綠色的重複淡出、以及這過程中混出的黃色來製造紅綠燈的效果。請依下列步驟操作:
STEP1 新增專案 建立一個Visual Studio C#專案,專案設定如下:
名稱:[traffic light]。 版本:4.2
STEP2 新增LED模組 新增multicolorLed模組,將Led連接到主控制版的5號接頭。
STEP3 設定按鈕後LED亮滅 程式解說:
using System;
using Gadgeteer.Modules.GHIElectronics;
namespace traffic_light
{
public partial class Program
{
void ProgramStarted()
{ Debug.Print(“Program Started”);
TimeSpan myTimeSpan1 = new TimeSpan(0, 0, 10);
TimeSpan myTimeSpan2 = new TimeSpan(0, 0, 30);
multicolorLed.FadeRepeatedly(GT.Color.Red, myTimeSpan1, GT.Color.Green, myTimeSpan2);
}
}
}
前幾行為自動建立的函式庫
定義時間myTimeSpan1為10秒
定義時間myTimeSpan2為30秒
紅光在時間myTimeSpan1淡出、在時間myTimeSpan2加深;
綠光在時間myTimeSpan1加深,在時間myTimeSpan2淡出,重複執行這個動作。
STEP4 編譯並下載 完成程式編譯後,將組裝完畢的Gadgeteer套組連接上電腦,按下Debug鍵下載程式。 執行程式時,LED燈會重複由紅轉黃再轉綠、由綠轉黃再轉紅的動作。
延伸練習與挑戰:
1.加上Button來控制程式的開始與結束。
2. 調配出自己想要的顏色。
3. 設計變數並結合RGB強度設定使燈光由藍慢慢轉紅。