「ATOM LITE」本体に内蔵されている「フルカラーLED(NeoPixel : WS2812B)」の色を繰り返し変化させるイルミネーションの作り方を詳しく紹介します。
LEDの色はおおまかに「赤→橙→黄→緑→青→藍→紫」の繰り返しで、実際はもっと細かく変化しています。
「ATOM LITE」については以下のリンクで詳しく紹介しています。
1.サンプルプログラム(コピペ)
「ATOM LITE」での「イルミネーション」プログラムを以下に準備しました。
下のコードを「コピペ」して書き込んでください。
※コピーは下コード(黒枠)内の右上角にある小さなアイコンのクリックでもできます。
#include <M5Atom.h> //Atomのヘッダファイルを準備
// FastLEDライブラリの設定(CRGB構造体)
CRGB dispColor(uint8_t r, uint8_t g, uint8_t b) {
return (CRGB)((r << 16) | (g << 8) | b);
}
// 変数宣言
int r = 255; //赤LED初期値(最大発光)
int g = 0; //緑LED初期値(消灯)
int b = 0; //青LED初期値(消灯)
int wait = 10; //色変更待ち時間
// 初期設定 -----------------------------------------------
void setup() {
// 本体初期化(UART有効, I2C無効, LED有効)
M5.begin(true, false, true);
}
// メイン -------------------------------------------------
void loop() {
// 赤色から緑色へ変化(この時 bは0、rは255)
for(g = 0; g < 255; g++) { //gを0から1づつ加算して254まで繰り返し
M5.dis.drawpix(0, dispColor(r, g, b)); //LED発光色指定
r--; //rを1づつ減算
delay(wait); //wait時間(ms)待つ
}
// 緑色から青色へ変化(この時rは0、gは255)
for(b = 0; b < 255; b++) { //bを0から1づつ加算して254まで繰り返し
M5.dis.drawpix(0, dispColor(r, g, b)); //LED発光色指定
g--; //gを1づつ減算
delay(wait); //wait時間(ms)待つ
}
// 青色から赤色へ変化(この時 gは0、bは255)
for(r = 0; r < 255; r++) { //rを0から1づつ加算して254まで繰り返し
M5.dis.drawpix(0, dispColor(r, g, b)); //LED発光色指定
b--; //bを1づつ減算
delay(wait); //wait時間(ms)待つ
}
}
20行目 ~25行目が赤色から緑色に変化するプログラムです。
同じように緑色から青色、青色から赤色に変化する3つのプログラムがあり、これらを順番に繰返し続けます。
2.プログラムの詳細
フルカラーLEDの色を指定するには「FastLED」ライブラリを使用します。
「FastLED」ライブラリについては以下のリンクで詳しく紹介しています。
色を徐々に変化させるには「C言語」の繰り返しプログラム「for文」を使用します。
「for文」については以下のリンクで詳しく紹介しています。
LEDが赤色から緑色へ変化するプログラムを例に紹介します。
M5.dis.drawpix ( 0, dispColor ( r, g, b ) ); //LED発光色指定
r— ; //r(赤)を1づつ減算
delay ( wait ) ; //wait 時間(ms)待つ
}
フルカラーLEDの初期値は赤(r)が最大の255で、緑(g)と青(b)が最小の0(消灯)なので最初は赤色に点灯しています。
赤色から緑色に変化させたいので、赤(r)の数値を減らして、緑(g)の数値を増やします。
これには繰り返し実行させるための「for文」を使用します。
「for文」は( )内の条件「g < 255」が成立している間{ }内のプログラムを実行し続けます。
M5.dis.drawpixは「FastLED」ライブラリの関数で、フルカラーLEDの色を指定して発光させるプログラムです。これが実行された時に( r, g, b )で赤緑青のLEDの明るさを指定して発光させます。
ここでは緑色LEDの発行色を指定する 緑(g)を0から1づつ加算(明るく)して254になるまでM5.dis.drawpixを実行し続けます。
同時に 「r–」 を実行して 赤(r)を1づつ減算することで暗くしていきます。
緑(g)が254で{ }内のプログラムが実行された後「g++」が実行され緑(g)は255になり「g < 255」が不成立のため「for文」は終了します。
この時点で、緑(g)が最大値の255、赤(r)は0(消灯)で次の処理に移ります。
以降、同じように緑色から青色、青色から赤色に変化するプログラムも順番に実行され、これらが繰り返されることで色が変化し続けます。
3.動作確認
電気を消して動作確認してみました。
カメラのレンズを通してみると明るく見えますが、実際はここまで明るくはないです・・・
小さいLEDなので物足りないかもしれませんが、水を入れた小瓶などを上に置くとキラキラして奇麗です♪白いプラスチックのボトルや乳白色の液体だともっと奇麗かも。
4.まとめ
「ATOM LITE」本体内蔵のフルカラーLEDの色を、繰り返し変化させるイルミネーションプログラムについて詳しく紹介しました。
内蔵のフルカラーLEDは「NeoPixel」と呼ばれるマイコン内蔵のLED(型:WS2812B)です。
RGB(赤緑青)のLEDが1つになったフルカラーLEDとは違い、プログラムで制御します。
「NeoPixel」はプログラムで制御する必要があるため「Lチカ」するだけでも結構大変ですが、Arduinoのライブラリ(FastLED)を使用することで簡単に制御することができます。
LEDの色を連続的に変化させるためには「C言語」の「for文」を使用しました。
「for文」は繰り返し実行したい時にかかせないプログラムで、以下のリンクで詳しく紹介しています。
コメント