プログラムでクリスマスイルミネーションを作ろう♪「ATOM LITE」

フルカラーLEDのカラフルな発光ATOM LITE
スポンサーリンク

もうすぐクリスマスですね♪クリスマスといえばイルミネーション!
ちっちゃいですがプログラムでクリスマスイルミネーションを作ってみましょ~。

ということでまたまた「ATOM LITE」の「フルカラーLED」の出番です。
「ATOM LITE」本体に内蔵されている「フルカラーLED」の色を、繰り返し変化させるプログラムを紹介します。

LEDの色はおおまかに「赤→橙→黄→緑→青→藍→紫」の繰り返しで、実際はもっと細かく変化します。

「ATOM LITE」については以下のリンクで詳しく紹介しています。

超小型で高機能!プログラミング初心者におすすめ「ATOM LITE」
マイコンボードはRaspberry Pi、Arduino、M5Stack等がありますが、一通りやってみてそれぞれの良さはあるものの「最初に何を?」と聞かれたら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つのプログラムがあり、これらを順番に繰返し続けます。

11行目 の「変数」waitで色が変化する時間を指定(ここでは10ms)しています。
delay( wait)は実行された時に( )内の時間(ms)待機します。
色が変化するたびに wait ms(ミリ秒)待機するので、この時間を長くするとゆっくり色が変わり、短くすると早く色が変わります。好みの時間間隔に設定してみましょう

2.色が変化していくプログラムの紹介

フルカラーLEDの色を指定するには「FastLED」ライブラリを使用します。
「FastLED」ライブラリについては以下のリンクで詳しく紹介しています。

定番の Lチカ!(ATOM LITE編)で遊びながら自然と身につくプログラミング
プログラミング初心者ならとりあえず「Lチカ」やりましょう!LEDを点灯、消灯(チカチカ)させるものです。サンプルプログラムをコピペでとりあえず動作確認。LEDの色は数値を変えるだけ。いろいろ試して遊びながら学びましょう♪

色を徐々に変化させるには「C言語」の繰り返しプログラム「for文」を使用します。
「for文」については以下のリンクで詳しく紹介しています。

動かして学ぶC言語「for文(繰り返し処理)」の使い方を基本から詳しく紹介
「for文」は実行回数を指定して繰り返し実行したい時によく使用されます。「if文」の条件分岐と組み合わせることで様々な動作を実現することができます。LEDの色を変化させるサンプルプログラムで詳しく紹介します。

LEDが赤色から緑色へ変化するプログラムを例に紹介します。

for( g = 0 ; g < 255 ; g++ )  { //g(緑)を0から1づつ加算して254まで繰り返し
  M5.dis.drawpix ( 0dispColor ( rgb ) );  //LED発光色指定
  r— ;                   //r(赤)を1づつ減算
  delay ( wait ) ;  //wait 時間(ms)待つ
}

フルカラーLEDの初期値は赤()が最大の255で、緑()と青()が最小の0(消灯)なので最初は赤色に点灯しています。
赤色から緑色に変化させたいので、赤()の数値を減らして、緑()の数値を増やします。

これには繰り返し実行させるための「for文」を使用します。
for文」は( )内の条件「g < 255」が成立している間{ }内のプログラムを実行し続けます。

M5.dis.drawpixは「FastLED」ライブラリの関数で、フルカラーLEDの色を指定して発光させるプログラムです。これが実行された時に( rgb )で赤緑青のLEDの明るさを指定して発光させます。

ここでは緑色LEDの発行色を指定する 緑()を0から1づつ加算(明るく)して254になるまでM5.dis.drawpixを実行し続けます。
同時に 「r–」 を実行して 赤()を1づつ減算することで暗くしていきます。

緑(g)が254で{ }内のプログラムが実行された後「g++」が実行され緑(g)は255になり「g < 255」が不成立のため「for文」は終了します。

この時点で、緑()が最大値の255、赤()は0(消灯)で次の処理に移ります。

delay ( wait )wait 時間(ミリ秒)待機するプログラムです。
今回は変数宣言時に10(10ミリ秒)に設定しています。
この時間を長くすると色がゆっくり変化し、短くすると早く変化します。
10ミリ秒というと0.01秒で非常に短く感じますが、マイコンの処理はもっと早い時間でプログラムを実行しています。このためこの delay が無いと超高速で色が変化しほぼ白に見えます。

以降、同じように緑色から青色、青色から赤色に変化するプログラムも順番に実行され、これらが繰り返されることで色が変化し続けます。

ここで出てくる 「g++」と「r–」について、これらは「1づつ加算する」時と「1づつ減算する」時によく使われます。
g++」は「g = g + 1」と書くのと同じ。
r–」は「r = r – 1」と書くのと同じ。

3.動作確認

電気を消して動作確認してみました。
カメラのレンズを通してみると明るく見えますが、実際はここまで明るくはないです・・・

フルカラーLEDのカラフルな発光

小さいLEDなので物足りないかもしれませんが、水を入れた小瓶などを上に置くとキラキラして奇麗です♪白いプラスチックのボトルや乳白色の液体だともっと奇麗かも。

フルカラーLEDのカラフルな発光
ここでは「C言語」の「for文」を使用しました。
「for文」は繰り返し実行したい時にかかせないプログラムです。
これについては別記事で詳しく紹介しています。

「for文」については以下のリンクで詳しく紹介しています。

動かして学ぶC言語「for文(繰り返し処理)」の使い方を基本から詳しく紹介
「for文」は実行回数を指定して繰り返し実行したい時によく使用されます。「if文」の条件分岐と組み合わせることで様々な動作を実現することができます。LEDの色を変化させるサンプルプログラムで詳しく紹介します。

コメント

タイトルとURLをコピーしました