ドットマトリクスLED簡単制御方法、点灯位置も色も思いのままに♪ATOM Matrix

LEDドットマトリクスアイコン

「ATOM Matrix」本体のドットマトリクスLEDの制御方法について紹介します。

「ATOM Matrix」の初期設定は「ATOM LITE」と同じで以下のリンクで詳しく紹介しています。

ATOM LITE の初期設定。プログラミング初心者におすすめ
Platform IOを使用した ATOM LITE の初期設定です。ファイルを作成、必要なライブラリの準備、初期設定方法を紹介。実際に「Lチカ」プログラムを「コピペ」で書き込み動作確認まで行います。
スポンサーリンク

1.ドットマトリクスLEDとは

ドットマトリクスLEDとはたくさんのLEDが縦横に並んだもので、LEDが点灯する位置や点灯色の組み合わせで文字や図形を表現できるものです。

使用されているLEDは「赤」や「青」等単色のものや「フルカラーLED」の物があります。

下画像の「micro:bit」にもドットマトリクスLED(縦横5×5 計25個)がついていますが、赤色の単色LEDのみです。

micro:bitのLED

今回使用するのはフルカラーLEDのドットマトリクス(縦横5×5 計25個)を搭載した「ATOM Matrix」です。

ATOM MatrixドットマトリクスLEDハート

「ATOM Matrix」本体に搭載されているドットマトリクスLEDの点灯位置や色を指定して、下画像のように簡単に思い通りのパターンで点灯させる方法を紹介します。

LEDドットマトリクスフルカラー
LEDドットマトリクスアイコン
LEDドットマトリクス数字
スポンサーリンク

2.「ATOM Matrix」の紹介

「ATOM Matrix」とは、中国のM5Stackテクノロジー社製マイコンボードで「Arduino」のコマンドで制御することができます。

同シリーズの「ATOM LITE」の高機能版で「ATOM LITE」に「ドットマトリクスLED」と「9軸センサ」が追加されたものです。

サイズは縦24mm、横24mmで高さは14mmと小型、なのにシリアル通信はもちろんWiFiもBluetoothも使える。しかも安い!

「Arduino」や「Raspberry Pi」とは違って基板剥き出しではなくケースに入っているので、プログラミングが初めての方でも安心して使えます。

初期設定の方法や端子配列、基本的な機能は「ATOM LITE」と同じですが、I2C通信端子「G21(SCL)、G25(SDA)」が内部の「9軸センサ」と繋がっているため、I2C通信専用として「I/O(入出力)端子」としては使用しない方がよいです。

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

ATOM LITE プログラミング初心者におすすめ超小型で高機能!
マイコンボードはRaspberry Pi、Arduino、M5Stack等がありますが、一通りやってみてそれぞれの良さはあるものの「最初に何を?」と聞かれたらATOM LITEが一番お手軽♪プログラミング初心者におすすめ
「開発環境の準備」がまだの方は → こちら
スポンサーリンク

3.サンプルプログラム(コピペ)

サンプル画面を表示するプログラムは以下のようになります。「コピペ」して書き込んでください。

※下コード(黒枠)内の右上角にある小さなアイコンのクリックでコピーできます。

#include <M5Atom.h>    //Atomのヘッダファイル(Arduino.h /Wire.h /FastLED.h含む)

// FastLEDライブラリの設定(CRGB構造体)
CRGB dispColor(uint8_t r, uint8_t g, uint8_t b) {
  return (CRGB)((r << 16) | (g << 8) | b);
}
// LEDマトリクス表示指定配列(0:消灯、1以上:色指定配列で指定した色に指定(color配列1次要素番号))
int matrix[5][5] = {{1,1,5,2,2},
                    {1,1,5,2,2},
                    {5,5,5,5,5},
                    {3,3,5,4,4},
                    {3,3,5,4,4}}; //十字と4色表示

// 色指定配列(1次要素を色番号として表示する色を2次要素の3原色{赤、緑、青}で設定)
//       LED色: {{0:消灯}  , {1:ピンク}   , {2:オレンジ}  , {3:グリーン} , {4:パープル}  , {5:ホワイト}}
int color[][3] = {{0, 0, 0}, {255, 0, 70}, {255, 70, 0}, {70, 255, 0}, {70, 0, 255}, {255, 255, 255}};

// 変数宣言
int num = 0;  //matrix配列の色番号格納用

// 初期設定 -----------------------------------------------
void setup() {
  M5.begin(false, false, true); //本体初期化(UART, I2C, LED)
}
// メイン -------------------------------------------------
void loop() {
  for (int i = 0; i < 5; i++) {     //matrix行ループ
    for (int j = 0; j < 5; j++) {   //matrix列ループ
      num = matrix[i][j];           //matrix配列の色番号取得
      //matrix行ごと(0,5,10,15,20)に左から右へ色番号の色で表示
      M5.dis.drawpix(i*5+j, dispColor(color[num][0], color[num][1], color[num][2]));
    }
  }
  delay(1000);  //遅延時間(ms)
}

4.ドットマトリクスLEDの点灯位置と色の指定方法

ドットマトリクスLEDの点灯位置と色の指定は「2次元配列」を使用することで簡単に制御することができます。
サンプルプログラムでは下画像のようなパターンでLEDを点灯させています。

ATOM MatrixドットマトリクスLED表示

配列については以下のリンクで詳しく紹介しています。

動かして学ぶC言語「配列」について、動かして目で見て理解しよう
配列は複数のデータをまとめて処理する時に便利です。この配列をLEDに見立ててフルカラーLEDテープライト(Neopixel)を制御しながら詳しく紹介します。

本体のフルカラーLEDを制御するためには「ATOM LITE」と同様に「FastLED」ライブラリを使用します。以下の手順でプロジェクトに追加しておきましょう。

ATOM LITE の初期設定。プログラミング初心者におすすめ
Platform IOを使用した ATOM LITE の初期設定です。ファイルを作成、必要なライブラリの準備、初期設定方法を紹介。実際に「Lチカ」プログラムを「コピペ」で書き込み動作確認まで行います。

まず、サンプルプログラムの7行目~12行目でドットマトリクスLEDの表示位置と色番号を指定する「2次元配列」を宣言します。この部分を抜粋したものが以下になります。

// LEDマトリクス表示指定配列(0:消灯、1以上:色指定配列で指定した色に指定(color配列1次要素番号))
int matrix[5][5] = {{1,1,5,2,2},
                    {1,1,5,2,2},
                    {5,5,5,5,5},
                    {3,3,5,4,4},
                    {3,3,5,4,4}}; //十字と4色表示

2次元配列「matrix」で5行×5列で並んだLEDの表示位置と色番号を指定します。
「1次要素」でLEDの「行」を「2次要素」で「列」を指定します。

「2次要素」の値で「0」を設定した位置は「消灯」を「1以上」の値を設定した位置は「その値(色番号)で指定した色でLEDを点灯」させます。

「matrix」の値は5列ずつ改行して5行で記入しています。これは本体のドットマトリクスLEDの配置そのものです。
「matrix」内で指定した位置に「0」以外の値が設定されると、その位置のLEDはその値の色で点灯します。LEDの点灯色は以下のようになります。
0:消灯、1:ピンク、2:オレンジ、3:グリーン、4:パープル、5:ホワイト

色番号とLEDの点灯色は14行目~16行目で以下のように2次元配列「color」で設定しています。

// 色指定配列(1次要素を色番号として表示する色を2次要素の3原色{赤、緑、青}で設定)
//       LED色: {{0:消灯}  , {1:ピンク}   , {2:オレンジ}  , {3:グリーン} , {4:パープル}  , {5:ホワイト}}
int color[][3] = {{0, 0, 0}, {255, 0, 70}, {255, 70, 0}, {70, 255, 0}, {70, 0, 255}, {255, 255, 255}};

「color」の「1次要素」が色番号「2次要素」がフルカラーLEDの点灯色で「色の3原色(赤、緑、青)」で設定します。

「color」の「1次要素」は「要素数」を指定せず宣言しているので、「2次要素」を追加して「1次要素」の番号を色番号として指定することで色数を増やすことも簡単にできます。

最後に27行目~33行目のように2次元配列「matrix」の「行」と「列」を2重ループで「1行5列」づつ要素(色番号)を取得します。
取得した要素(色番号)は変数「num」に取得します。

次に取得した色番号でドットマトリクスLEDを点灯させます。

for (int i = 0; i < 5; i++) {     //matrix行ループ
  for (int j = 0; j < 5; j++) {   //matrix列ループ
    num = matrix[i][j];           //matrix配列の色番号取得
    //matrix行ごと(0,5,10,15,20)に左から右へ色番号の色で表示
    M5.dis.drawpix(i*5+j, dispColor(color[num][0], color[num][1], color[num][2]));
  }
}

ドットマトリクスLEDの点灯には専用のライブラリ「FastLED」を使用します。
「FastLED」はフルカラーLEDを制御するライブラリです。

以下に「FastLED」ライブラリの使用方法について紹介します。

M5.dis.drawpix」がフルカラーLEDの色を指定するコマンドです。
これはフルカラーLED制御用のライブラリ「Fast LED」固有のものです。

・ドットマトリクスのフルカラーLEDの色を指定するプログラム
  M5.dis.drawpix ( LED番号dispColor ( 赤LED緑LED青LED ) );

青文字:フルカラーLEDを制御するためのコマンド
LED番号:制御するLEDの番号「ATOM Matrix」は25個あるので「0」~「24
赤LED:赤色LEDの光の強さを数値で指定「0」~「255
緑LED:緑色LEDの光の強さを数値で指定「0」~「255
青LED:青色LEDの光の強さを数値で指定「0」~「255
     ※「0」で消灯

LED番号」は2次元配列「matrix」の要素を取得する2重ループの中で指定します。
2重ループでは1行5列づつ指定しており、その中で「LED番号」「0」~「24」を指定する必要があります。
このため「LED番号」には「i*5+j」を指定しています。こうすることで2重ループ(i=0~4、j=0~4)で「LED番号」「0」~「24」を指定することができます。

LEDの点灯色はフルカラーLED()の色の3原色で指定します。
それぞれの光の強さは2次元配列「color」に設定されており、変数「num」に取得した色番号を「1次要素」として指定することで「color」に設定した色を指定できます。

これで2次元配列「matrix」で指定した位置のLEDの色を色番号どおりに点灯させることができます。

5.まとめ

ドットマトリクスLEDとはたくさんのLEDが縦横に並んだもので、LEDが点灯する位置や点灯色の組み合わせで文字や図形を表現することができます。

「ATOM Matrix」には5×5の25個のフルカラーLEDで構成されたドットマトリクスLEDがあり、2重配列と「FastLED」ライブラリを使用することで簡単に制御できます。

2重配列の並びがそのままドットマトリクスLEDの並びになり、色の指定はフルカラーLEDの色の3原色で指定します。

5×5のドットで表現できる図形には限りがありますが、フルカラーLEDで色も組み合わせることでその幅は大きく広がります。色と配置の組み合わせでいろんな図形を作ってみましょう

コメント

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