単色マトリックスLEDに階調をつけて擬似複数色化

赤色の8×8マトリックスLEDをArduino UNOで光らせます。単に光らせるだけでは面白くないので、赤色に階調を付けて擬似的に複数色出せるようにします。

複数色が必要なら、2色マトリックスLEDなり、フルカラーマトリックスLEDなり買えば良いのですが、今回はあえて単色マトリックスLEDです。多色のマトリックスLEDに比べると配線が増えないというメリットが一応はあります。

発光方法は、基本的にはよくある1ドット毎のダイナミック点灯ですが、暗くしたいドットは下の表のように、電流を流す(出力をHIGHにする)ことを制限することによって、赤色に階調を付けます。単純計算で、「明るい赤」は「暗い赤」の8倍明るいはず。

調整すればもっと多くの階調を作れますが、やりすぎると暗いドットがチカチカしてしまうのと、あまり階調の違いがわからなくて面白くありませんでした。

点灯サイクル 0 1 2 3 4 5 6 7
明るい赤 HIGH HIGH HIGH HIGH HIGH HIGH HIGH HIGH
中間の赤 HIGH HIGH HIGH LOW LOW LOW LOW LOW
暗い赤 HIGH LOW LOW LOW LOW LOW LOW LOW
消灯 LOW LOW LOW LOW LOW LOW LOW LOW

 

消灯+赤色3階調ではこんな感じになります。

 

階調が使えることで、ドット絵だって…うん、離れてみればなんとか。ちなみにこちらはマリオランドのチビボーです。

 

消灯+赤色7階調でグラデーションにしてみました。

 

もちろん動かすことも出来ます。

 

 

コードはこんな感じになります。

<code>//ピン設定
//Arduinoの2~17ピンをマトリックスLEDの1~16ピンに接続
const static byte a[8] = {10,15, 9,13, 2, 8, 3, 6};
const static byte c[8] = {14, 4, 5,11, 7,12,16,17};</code>

//表示パターン
byte testpattern[8][8] = {
{7,7,7,7,3,3,3,3},
{7,7,7,7,3,3,3,3},
{7,7,7,7,3,3,3,3},
{7,7,7,7,3,3,3,3},
{1,1,1,1,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,0}
};

byte t = 0;
byte x, y;

void setup() {
//ピン初期化
for (byte i=0; i<8; i++) {
pinMode(a[i], OUTPUT);
digitalWrite(a[i], LOW);
pinMode(c[i], OUTPUT);
digitalWrite(c[i], HIGH);
}
}

void loop() {
//点灯サイクル用のカウンタ
if (t>=7) {
t = 0;
} else {
t += 1;
}

//表示パターンと点灯サイクルを比較して点灯・消灯
for (x=0; x<8; x++) {
for (y=0; y<8; y++) { if (testpattern[x][y] > t) {
digitalWrite(a[x], HIGH);
digitalWrite(c[y], LOW);
} else {
digitalWrite(a[x], LOW);
digitalWrite(c[y], HIGH);
}
delayMicroseconds(5);
digitalWrite(a[x], LOW);
digitalWrite(c[y], HIGH);
}
}
}

使える色が増えると何が出来るかって言うと、例えばこんな8×8のマトリックスLEDを使ったゲームが、単色マトリックスLEDでも(頑張れば)出来るようになります。楽しそうですね。

 

[amazon_link asins=’B0044X2E5S,B013QV28CW’ template=’t-dilemma’ store=’tandh.work-22′ marketplace=’JP’ link_id=’fd8b1ca1-bb23-43bf-8e2b-f8a5a968ebe2′]

電子工作Tips

Posted by T&H