MAX7219と言う制御ICを搭載し、8×8ドットのLEDで構成された正方形のドットマトリクスが良く売られている。数珠繋ぎに繋げる事ができ、4ユニット繋がったものも売られている。
WINGONEER MAX7219 Dot Matrix Module For Arduino Microcontroller 4 In 1 Display with 5pin Line
Arduinoから、良くある電光掲示板の様に使う事が出来る。機能が豊富なライブラリも存在し、点滅やスクロール、2段使っての表示等様々な表示が出来るがライブラリの使い方がやや難しい。
複数のパートに分けて、基本的な使い方と独自フォントの作り方を説明していこうと思う。
使用するライブラリは以下の二つ。MAX72XXのIC制御ライブラリと、表示用のParolaライブラリ。
https://github.com/MajicDesigns/MD_MAX72XX
https://github.com/MajicDesigns/MD_Parola
繋げたユニットをエリア分割してそれぞれの分割したエリアで異なるアニメーション制御をしたりと使いこなせば面白い表現が出来る。
まずは基本から。4ユニットの8×8ドットを繫げ、中央にHelloと表示するサンプル。
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
//ドットマトリクス
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW //デバイス種別
#define MAX_DEVICES 4 //8x8のマトリクス表示のユニット数
#define DATA_PIN 11 //DATA
#define CS_PIN 10 //CS
#define CLK_PIN 13 //CLK
MD_Parola dot = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
void setup() {
dot.displayReset();
dot.begin();
dot.displayText("Hello", PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);
}
void loop() {
dot.displayAnimate();
}
displayTextで表示するテキスト、配置(左寄せ、中央、右寄せ)、アニメーション速度、表示開始時の方式、表示終了時の方式等をパラメーターとして設定する。
Parolaの関数一覧は下記ページにある。ライブラリの \MD_Parola-master\docs の下にあるindex.htmlを開いても良い(こちらの方がサーチが正しく動作する)。
https://majicdesigns.github.io/MD_Parola/class_m_d___parola.html
アニメーション開始エフェクトと終了エフェクトにスクロールを入れるとスクロールする。
displayTextの3、4番目の数字にアニメーションの速度と停止時間を設定する事で 開始アニメーション速度 停止時間 終了アニメーション速度 になる。
dot.displayText("Hello", PA_CENTER, 10, 0, PA_SLICE, PA_NO_EFFECT);
の様に開始アニメーションだけ設定しておけば、文字がアニメーション表示で現れた後そのままになる。
dot.displayText("Hello", PA_CENTER, 100, 100, PA_BLINDS, PA_SCROLL_DOWN);
上記はブラインド形式で表示、下方向にスクロールして消えていく。速度と停止時間の100は、時間ではなくフレーム数になっている。
アニメーションは displayAnimate() 関数を呼ぶたび1フレームずつ進んでいく。速度の数値と、displayAnimate()の関数を呼び出す頻度で実際にかかる時間を調整する。
また、アニメーションは一度終了するとそのままになりループはしないので、getZoneStatus でアニメーションが完了したか判定し、完了した場合再度displayText を呼び出し次のアニメーションに繋げる。
以下は延々とテキストのアニメーションを繰り返すサンプル。
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
//ドットマトリクス
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW //デバイス種別
#define MAX_DEVICES 4 //8x8のマトリクス表示のユニット数
#define DATA_PIN 11 //DATA
#define CS_PIN 10 //CS
#define CLK_PIN 13 //CLK
MD_Parola dot = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
void showtext(){
dot.displayText("Hello", PA_CENTER, 100, 100, PA_BLINDS, PA_SCROLL_DOWN);
}
void setup() {
dot.displayReset();
dot.begin();
showtext();
}
void loop() {
dot.displayAnimate();
delay(10);
if (dot.getZoneStatus(0)){ //指定ゾーンのアニメーション完了判定
showtext();
}
}