知的好奇心 for IoT

IoT関連の知的好奇心を探求するブログです

4連8x8ドットLEDマトリックスの不思議体験談

今日は、こんなこともあるんだ!っていう不思議体験に遭遇したので、その事について書きます。

講座でも使用している、4連8x8ドットLEDマトリックスですが、秋月電子さんなどの秋葉原のお店では売っていなくて、ネット通販でしか入手できないんです。

あるとき、入手手段を増やそうと買ったことのないところから買って、IoT電光掲示板の講座で使用しているプログラムを実行してみたら、ん、ん〜!なんか表示がおかしい!最後の8x8LEDマトリックスの文字が読めない!と、なったんです。

何かLEDマトリックスのテストになりそうな方法がないものかと、MD_MAX72xxライブラリのサンプルプログラムを漁っていたら、MD_MAX72xx_Testというサンプルプログラムの中に全てのLEDの点灯と消灯を繰り返すblinking()というファンクションがあって、ファンクションの中に次のコードが書かれていました。ONで全点灯、OFFで全消灯するっぽいですよね。

    mx.control(MD_MAX72XX::TEST, MD_MAX72XX::ON);
    mx.control(MD_MAX72XX::TEST, MD_MAX72XX::OFF);

このコードを元に、次の配線で実際に動作するプログラムにしてみました。
配線

 (LED)  (ATOM Lite)
- VCC --- 5V
- GND --- G
- DIN --- G19
- CS  --- G22
- CLK --- G23

プログラム

#include <MD_MAX72xx.h>                 // LEDマトリックスライブラリ

// LEDマトリックスの定義
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW // LEDマトリックスのタイプ選択
#define MAX_DEVICES    4                   // 8x8LEDマトリックスの接続数
#define PIN_DIN     19                  // DINピンのGPIO
#define PIN_CS      22                  // CSピンのGPIO
#define PIN_CLK     23                  // CLKピンのGPIO

MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, PIN_DIN, PIN_CLK, PIN_CS, MAX_DEVICES);

void setup() {
  mx.begin();                           // LEDマトリックスの初期化
}

void loop() {
  mx.control(MD_MAX72XX::TEST, MD_MAX72XX::ON);  // 全点灯
  delay(1000);
  mx.control(MD_MAX72XX::TEST, MD_MAX72XX::OFF); // 全消灯
  delay(1000);
}

このプログラムを実際に動作させたら、こんな表示になりました!
全点灯 全消灯

一番左のLEDの表示が、明らかにおかしく、文字は右から左に流れるので、最後の文字が読めなくなった理由が一番左のLEDの動作不具合だったことがわかりました。

ずっと、単なるLEDの不良かと思っていたのですが... この記事を書くにあたって、ちょっと色々と試してみる事にしました。

まずは、不良がLED側なのか基盤側なのかを確かめるために、左側の2個のLEDを付け替えてみました。すると、今度は左から2番目の表示がおかしくなったのです! これで、基盤側の問題ではないことがハッキリしました。

ぼくが次に行った事を推理しながら、次の写真を見てください。 LEDマトリックスの一辺に印字がされていて、全てのLEDマトリックスの印字が見えると思います。

便宜的に上下の分かり難い部品は印字などで区別するのですが、もしやと思って正しく表示できなかったLEDマトリックスの上下を変えてみました。 すると、なんと、キチンと動作したのです! 不具合の原因は、LEDマトリックスの印字位置が上下逆になっていたせいで、LEDマトリックスが上下逆に取り付けられていた事だったんです!

こんなことも、あるものなのですねぇ...。