LEDが(8×8=64)ひとまとまりになって、数字や文字・簡単なキャラクタまで表現できる優れものです。どんなものなのか、電車やバスの行先案内表示板をイメージして一回やってみます。
用意したのは、「赤色ドットマトリックスLED8×8ドット OSL641501-ARA」というマトリックスLEDです。
では、使用する材料を準備します。
- ドットマトリックスLED8×8:1個
- ブレッドボード: 2個
- 抵抗:330Ω:8個(ちょっと暗くなるかも)
- やや長いジャンパー線:16本
- 短いジャンプワイヤ:8本
- Arduino本体:1個
- USBケーブル:1本(PC⇔Arduino接続用)
- パソコン:1台(ArduinoIDEインストール済)

LEDにはアノード(プラス)とカソード(マイナス)と2つの接続接点があるのと、それぞれどちらかに抵抗をつけなきゃいけないので配線だけでも、ちょっと大変!です。しかも、ただピンが8本×2列の16本出てるだけなので、どれがどのLEDなのかさっぱり訳が分からんです。



配線図面の画像は秋月電子通商様赤色ドットマトリクスLED 8×8ドットデータシートより引用
さてさて、どのように接続したらよいのでしょう????
以下に先人たちのお知恵を拝借いたしました。(赤い丸印を手前(下)側に置いて示します)
arduino | A 3 | A 2 | D 3 | D 10 | D 5 | A 1 | D 13 | D 2 |
抵抗 | 抵抗 | 抵抗 | ||||||
マトリックスLED 上側のpin | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
左から1→8 | ||||||||
マトリックスLED 下側のpin | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
抵抗 | 抵抗 | 抵抗 | 抵抗 | 抵抗 | ||||
arduino | D 6 | D 8 | D 11 | D 12 | D 9 | A 0 | D 7 | D 4 |


それでは、ArduinoIDEにコードを書きます。以下
// 「にこにこ」
boolean ledmatrix[8][8] = {
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,1,0,0,1,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,1},
{0,1,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0}
};
void setup(){
// 2ピン~13ピン、A0ピン~A3ピンを14ピン~17ピンとして出力する設定を行う
for(int i=2;i<=17;i++){
pinMode(i,OUTPUT);
digitalWrite(i,HIGH);
}
}
void loop(){
// 行(横)ループ(2番ピン~9番ピンを行として使用)
for( int i = 2 ; i <= 9 ; i++ ){
// 対象の行をLOW(0)に設定→対象行を点灯対象に設定
digitalWrite( i , LOW );
// 列(縦)ループ(10番ピン~17番ピンを列として使用)
for( int j = 10 ; j <= 17 ; j++ ){
// ピン番号と出力位置が異なるので位置補正して出力する
digitalWrite( j , ledmatrix[ i - 2 ][ j - 10 ] );
// 300マイクロ秒待機
delayMicroseconds(300);
// 対象列の消灯
digitalWrite( j , LOW );
}
// 対象行の消灯
digitalWrite( i , HIGH );
}
}

やったぁ!「にっこり」してくれました。
次は、動きを付けてみたいと思います。ArduinoIDEにコードを書きます。以下
// 「イカ星人」
boolean ledmatrix[8][24] = {
{0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, },
{0,0,1,1,1,1,0,0, 0,0,1,1,1,1,0,0, 0,0,1,1,1,1,0,0, },
{0,1,1,1,1,1,1,0, 0,1,1,1,1,1,1,0, 0,1,1,1,1,1,1,0, },
{1,1,0,1,1,0,1,1, 1,1,0,1,1,0,1,1, 1,1,0,1,1,0,1,1, },
{1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, },
{0,0,1,0,0,1,0,0, 0,0,1,0,0,1,0,0, 0,0,1,0,0,1,0,0, },
{0,1,0,1,1,0,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,0,0,1,1, },
{1,0,1,0,0,1,0,1, 0,1,0,1,0,0,1,0, 1,0,1,0,1,0,0,1, }
};
// 現在の文字の番号
int count = 0;
// 1文字に使用するLEDの数
int tani = 8;
void setup(){
// 2ピン〜13ピン、A0ピン〜A3ピンを14ピン〜17ピンとして
// 出力する設定を行う
for(int i=2;i<=17;i++){
pinMode(i,OUTPUT);
digitalWrite(i,HIGH);
}
}
void loop(){
// スクロールを遅くするため、待ち時間を設定
int time = 15;
//
while(time > 0){
// 行(横)ループ(2番ピン〜9番ピンを行として使用)
for( int i = 2 ; i <= 9 ; i++ ){
// 対象の行をLOW(0)に設定→対象行を点灯対象に設定
digitalWrite( i , LOW );
// 列(縦)ループ(10番ピン〜17番ピンを列として使用)
for( int j = 10 ; j <= 17 ; j++ ){
// ピン番号と出力位置が異なるので位置補正して出力する
digitalWrite( j , ledmatrix[ i - 2 ][ j - 10 + count*tani ] );
// 300マイクロ秒待機
delayMicroseconds(300);
// 対象列の消灯
digitalWrite( j , LOW );
}
// 対象行の消灯
digitalWrite( i , HIGH );
}
time--;
}
// 最後の文字まで出力したら最初に戻す
if (count >= 2){
count = 0;
}
else{
count++;
}
}
やったぁ!「イカ星人」が登場してくれました。
