#はじめに
Amazonで買った8×8×4のドットマトリックスをArduinoで使うときにちょっと躓いたので書いておきます。
購入したのはkwmobile 8x32 LED ドットマトリックス モジュール - Raspberry Pi Arduino DIY キット MCU - ディスプレイ 表示モジュール MAX7219
似たようなものがあちこちで1000円前後で売られています。
中国から直接買うともっと安いと思います。
8セグメントLED制御ICのMAX7219と8×8のLEDドットマトリックスを組み合わせたものを4つ数珠繋ぎにしたものです。SPIでマイコンに接続して動かします。
#ライブラリ
このタイプのドットマトリックスのライブラリはいろいろあって迷うのですが、
Parola for Arduino 2.0 - LED Matrix with MAX7219 controller
このYoutubeのデモをみてParolaを使うことにしました。
必要なライブラリは
https://github.com/MajicDesigns/MD_MAX72XX
https://github.com/MajicDesigns/MD_Parola
の2つです。ライブラリの管理からそのままインストールできます。
ライブラリをインストールするとMD_Parolaのスケッチ例にHelloWorldが追加されるので、ArduinoUnoに繋いで動かしてみます。
#Arduinoとの接続
接続は次のようになります
このとき、ArduinoUnoがマスターでドットマトリックスがスレーブです。
基板のピン | ArduinoUnoのピン | 備考 |
---|---|---|
CLK | Digital13(SCK) | System Clock システムクロック SPI通信の同期信号 |
CS | Digital10(SS) | Slave Select スレーブセレクト このピンがlowのときマスターとの通信が有効になる このピンがHighのとき、スレーブは通信を無視するようになる |
DIN | Digital11(MOSI) | Moster Out Slave In マスターアウトスレーブイン SPI通信でマスター側からスレーブ側への信号を送信する SPI通信にはこれとは逆にMISOというスレーブ側からマスターに信号を送るピンがあるが、LEDマトリックスからマイコンに信号が送られることはないのでこれは省略されえている |
GND | GND | グランド |
VCC | 5V | LEDの電源 数珠繋ぎを長くすると、Arduinoの給電能力を超えるかも そのときは安定化電源を繋ぐ必要があるかもしれない |
#Helloサンプル
// Program to demonstrate the MD_Parola library
//
// Simplest program that does something useful - Hello World!
//
// MD_MAX72XX library can be found at https://github.com/MajicDesigns/MD_MAX72XX
//
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
// Define the number of devices we have in the chain and the hardware interface
// NOTE: These pin numbers will probably not work with your hardware and may
// need to be adapted
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 11
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
// Hardware SPI connection
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// Arbitrary output pins
// MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
void setup(void)
{
P.begin();
P.displayText("Hello", PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);
}
void loop(void)
{
P.displayAnimate();
}
最大デバイス数が11になっているので4に変更します。
#define MAX_DEVICES 4
#トラブルシューティング
しかしこれを使ってもそのままでは動きませんでした。
左右が反転してしまっています。
これに関して検索してみると、公式のフォーラムで回答を見つけました。どうやらこのトラブルは定番のようです。
Topic: Parola for arduino problem. My texts are reversed!
FIXED
For those of you who are still struggling, replace the PAROLA_HW with your appropriate type on this line:
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HWPAROLA_HW
Use the Parola style hardware modules.GENERIC_HW
Use 'generic' style hardware modules commonly available.ICSTATION_HW
Use ICStation style hardware module.FC16_HW
Use FC-16 style hardware module.
どうやらハードウェアの構成が4種類があり、
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
の"::"以降を変更すれば正常に表示できるようです。
さらに詳しい情報はこちらにありました。
Parola A to Z – Adapting for Different Hardware
LEDの取り扱い方が異なっているようです。
回路を調べるよりは総当たりで正常に表示されるものを使ったほうが早そうです。
##PAROLA_HW
左右が反転してしまっています。
##GENERIC_HW
これはLEDマトリックスの配置が縦になると正常に表示されそうです。
##ICSTATION_HW
コネクタが右側にきましたが、正常に表示できました。
##FC16_HW
ドットマトリックス自体の順番がおかしくなっています。
よって、ICSTATION_HWを使えば問題なく表示できるようです。
#おわりに
Parolaのライブラリを使って、ドットマトリックスにHelloを表示させることができるようになりました。
スクロール表示等はまだですが、これからやっていきたいと思います。