LoginSignup
5
1

More than 3 years have passed since last update.

ArduinoでMAX7219を使った8×8×4のLEDドットマトリックス用Parolaライブラリを使うときに、LEDの並びがおかしかったらどうするか

Last updated at Posted at 2020-03-24

はじめに

Amazonで買った8×8×4のドットマトリックスをArduinoで使うときにちょっと躓いたので書いておきます。
AMZN_2020-03-24_22_07_57.jpg

購入したのは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
MD_MAX.png
https://github.com/MajicDesigns/MD_Parola
MD_parola.png

の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サンプル

Parola_HelloWorld.ino
// 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

トラブルシューティング

しかしこれを使ってもそのままでは動きませんでした。
AMZN_2020-03-24_22_11_10 (2).jpg
左右が反転してしまっています。

これに関して検索してみると、公式のフォーラムで回答を見つけました。どうやらこのトラブルは定番のようです。
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_HW

PAROLA_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

AMZN_2020-03-24_22_11_10 (2).jpg
左右が反転してしまっています。

GENERIC_HW

AMZN_2020-03-24_22_37_41 (2).jpg
これはLEDマトリックスの配置が縦になると正常に表示されそうです。

ICSTATION_HW

AMZN_2020-03-24_22_09_07 (2).jpg
コネクタが右側にきましたが、正常に表示できました。

FC16_HW

AMZN_2020-03-24_22_47_10 (2).jpg
ドットマトリックス自体の順番がおかしくなっています。

よって、ICSTATION_HWを使えば問題なく表示できるようです。

おわりに

Parolaのライブラリを使って、ドットマトリックスにHelloを表示させることができるようになりました。
スクロール表示等はまだですが、これからやっていきたいと思います。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1