« Arduino UNO 超音波センサーロボットカーに後方センサーを追加 | Main | 4-8x8 dot matrix Clock drive by Arduino NANO and GPS »

06/11/2019

Arduino で 4-8x8 dotmatrix LED使用方法(いわゆるLチカ)

4-8x8ドットマトリックスLEDで時刻表示を行いたいが、私が理解しやすい方法がなかなか見つからなかった。
直接に時計表示では、何が問題でうまくできないのかが明確に分からないので、単純にLED表示だけを行って、やり方を確認することにした。

参考にしたのは「8×32 LED Matrix MAX7219 Tutorial with Scrolling Text」というブログ。ここでは、4つの8x8ドットLEDマトリックスに対して、設定した文字列を左右方向に流すもの。私は、まず固定表示で、表示方法を確認するのが目的なので、そこに書かれているスケッチから、私の目的に対し不要なものは削って、なるべく最小限のスケッチで、8x8ドットマトリックスの表示を使うには、どうすれば良いかを探ってみた。

下記のスケッチでは、文字列「23:56」を表示させるもので、使っているフォントの1文字の幅は5dotである。表示装置の横幅は、32dotあるので、「23:56」が形よく表示されるように、各文字の表示位置を下記のように少し修正している。

matrix.drawChar( 1, 0, string[0], HIGH, LOW, 1);
matrix.drawChar( 8, 0, string[1], HIGH, LOW, 1);
matrix.drawChar(13, 0, string[2], HIGH, LOW, 1);
matrix.drawChar(18, 0, string[3], HIGH, LOW, 1);
matrix.drawChar(25, 0, string[4], HIGH, LOW, 1);


左端に位置する「2」と、右端に表示する「6」の表示バランスを考え、左側には1列分、右側には2列分を空けることにした。
各文字のX方向の開始位置は、上記のスケッチのように 1,8,13,18,25 とした。そうすると、「2」「3」「:」「5」「6」の各文字の間には、それぞれ2ドット分の空きができる。

フォントの高さは7ドットなので、Y方向は「0」とした。その結果、表示の下の行には、無表示の部分ができる。
もし、文字の上部側に無表示のドットスペースを置くのなら、Y方向は「1」とすればよい。

注意しなければいけない事として、matrix.setPosition の書き方があるように思う。

matrix.setPosition( 0, 3, 0) ; // The first display is at <0, 0>
matrix.setPosition( 1, 2, 0) ; // The second display is at <1, 0>
matrix.setPosition( 2, 1, 0) ; // The third display is at <2, 0>
matrix.setPosition( 3, 0, 0) ; // The fourth display is at <3, 0>


ブログからサンプルとしたものでは、文字が乱れて、どのように並んでいるのか、良くわからない状態だった。
僕は表示させる文字列を「1234」として、表示がどのように並ぶかを確認してみた。
その結果、サンプルのものでは「4321」と並んでいることが分かったので、上記に取り出したサンプルのように、2列目の番号を入れ替えた。


パーツの接続方法
Arduino NANO       MAX7219
5V  ---------------- VCC : 写真では「黄色」
GND --------------- GND : 写真では「緑色」
D11 --------------- DIN : 写真では「青色」
D10 --------------- CS : 写真では「紫色」
D13 --------------- CLK : 写真では「灰色」

使用した部品類
・8x32 LED MAX7219 Dot Matrix Module 
・Arduino NANO
・ブレッドボード

配線図・写真
    

Sketch (Source Code)

#include  <Adafruit_GFX.h>
#include <Max72xxPanel.h>
// Vcc - Vcc
// Gnd - Gnd
// Din - Mosi (Pin 11)
// Cs - SS (Pin 10)
// Clk - Sck (Pin 13)
const int pinCS = 10;
const int numberOfHorizontalDisplays = 4;
const int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
const int wait = 50;
const int spacer = 1;
const int width = 5 + spacer;
void setup(){
matrix.setIntensity( 1 ) ; // Adjust the brightness between 0 and 15
matrix.setPosition( 0, 3, 0) ; // The first display is at <0, 0>
matrix.setPosition( 1, 2, 0) ; // The second display is at <1, 0>
matrix.setPosition( 2, 1, 0) ; // The third display is at <2, 0>
matrix.setPosition( 3, 0, 0) ; // The fourth display is at <3, 0>
   matrix.setRotation( 0, 1) ;     // Display position
matrix.setRotation( 1, 1) ; // Display position
matrix.setRotation( 2, 1) ; // Display position
matrix.setRotation( 3, 1) ; // Display position
}
void loop(){
String string = "23:56";
matrix.fillScreen(LOW);
matrix.drawChar( 1, 0, string[0], HIGH, LOW, 1);
matrix.drawChar( 8, 0, string[1], HIGH, LOW, 1);
matrix.drawChar(13, 0, string[2], HIGH, LOW, 1);
matrix.drawChar(18, 0, string[3], HIGH, LOW, 1);
matrix.drawChar(25, 0, string[4], HIGH, LOW, 1);
matrix.write(); // Send bitmap to display
delay(wait);
}


参考としたブログ
https://earthbondhon.com/8x32-led-matrix-max7219-tutorial-with-scrolling-text/
 ここに書かれていたコードは、4つのマトリックスモジュールに対して文字列を流れるように表示するもの。

« Arduino UNO 超音波センサーロボットカーに後方センサーを追加 | Main | 4-8x8 dot matrix Clock drive by Arduino NANO and GPS »

Arduino」カテゴリの記事

Comments

Post a comment

Comments are moderated, and will not appear on this weblog until the author has approved them.

(Not displayed with comment.)

« Arduino UNO 超音波センサーロボットカーに後方センサーを追加 | Main | 4-8x8 dot matrix Clock drive by Arduino NANO and GPS »

September 2019
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Recent Trackbacks

無料ブログはココログ