ドットマトリクスLEDを自由に操る(Arduino)
Arduinoで、ドットマトリクスLEDの好きな場所を点滅させる方法について(自分の為のメモ書き)
ドットマトリクスLEDとは、
こんな風に、LEDがマス目状に並んだもの。
基礎知識
電気は、プラス(アノード)からマイナス(カソード)に流れる。
そして、電圧の高い方から低い方に流れる。
なので、 HIGH → LOW に流れる。
回路図で書くと、上の矢印の方向に電気が流れる。
3×3のマトリックスLEDで考える
3×3のマトリックスLEDの回路図
アノード 3本(1、2,3)
カソード 3本(4,5,6)をArduinoのデジタルピンに接続することになる。
これをブレッドボード上で作ってみる。(抵抗を考えると、回路が複雑になるので、抵抗入りのLEDを使って作った)
A~IがLED +がアノード -がカソード になる。
⑫がArduinoのデジタルの1番ピン(D1)に
⑬がArduinoのデジタルの2番ピン(D2)に
⑭がArduinoのデジタルの3番ピン(D3)に
⑨がArduinoのデジタルの4番ピン(D4)に
⑦がArduinoのデジタルの5番ピン(D5)に
⑮がArduinoのデジタルの6番ピン(D6)に 繋ぐ。
配線が汚いのですが、こんな感じになる。
大きなブレッドボードを使って、間隔をあけて配線をした方が、後で配線の確認がしやすいと思う。
Aを光らせる
- 電気の流れを1から4に向かって流す。
1を HIGHにして、4をLOWにする。
仮にHIGHを5V、LOWを0Vとすると、電圧が高い5Vから0Vに流れるのでAは点灯する。
- A以外は消灯する。
電圧を同じにするか、LOWからLOW 又は、HIGHからHIGHという流れを作ればよい。
Bを消灯する
1はHIGHとなっているので、5をLOWにするとBに対して、HIGHからLOWという電圧の流れが出来るのでBは点灯する。
1のHIGHは、変更できないので、5を変えるしかない。HIGHかLOWの2択なのでLOWがダメなら、HIGH。
1はHIGH、5をHIGHにする。Bに対しては、HIGHからHIGHに電流がながれる(電圧の変化がない)ので、Bは消灯する。
Cを消灯する
1はHIGHとなっているので、6をLOWにするとCに対して、HIGHからLOWという電圧の流れが出来るのでCは点灯する。
1のHIGHは、変更できないので、6を変えるしかない。HIGHかLOWの2択なのでLOWがダメなら、HIGH。
1はHIGH、6をHIGHにする。Cに対しては、HIGHからHIGHに電流がながれる(電圧の変化がない)ので、Cは消灯する。
Dを消灯する
4はLOWとなっているので、2をHIGHにすると、HIGHからLOWという電圧の流れが出来るのでDは点灯する。
4のLOWは、変更ができないので、2を変えるしかない。HIGHがダメならLOW。
2はLOW、4もLOWにする。Dに対しては、LOWからLOWに電流が流れる(電圧の変化がない)ので、Dは消灯する。
Eを消灯する
2はLOWとなっていて、5はHIGHとなっている(変更はできない)
Eに対しては、LOWからHIGHに電流が流れようとするけど、低いほうから高いほうには流れないので、Eは消灯する。
Fを消灯する
2はLOWとなっていて、6はHIGHとなっている(変更はできない)
Fに対しては、Eと同じで、LOWからHIGHに電流が流れようとするけど、低いほうから高いほうには流れないので、Fは消灯する。
Gを消灯する
4はLOWとなっているので、3をHIGHにすると、HIGHからLOWという電圧の流れが出来るのでGは点灯する。
4のLOWは、変更ができないので、3を変えるしかない。HIGHがダメならLOW。
3はLOW、4もLOWにする。Gに対しては、LOWからLOWに電流が流れる(電圧の変化がない)ので、Gは消灯する。
Hを消灯する
3はLOWとなっていて、5はHIGHとなっている(変更はできない)
Hに対しては、LOWからHIGHに電流が流れようとするけど、低いほうから高いほうには流れないので、Hは消灯する。
Iを消灯する
3はLOWとなっていて、6はHIGHとなっている(変更はできない)
Iに対しては、Hと同じで、LOWからHIGHに電流が流れようとするけど、低いほうから高いほうには流れないので、Iは消灯する。
Arduinoのプログラム
/* 3X3 マトリックス ピン番号 1、2、3 プラス(アノード) ピン番号 4、5、6 マイナス(カソード) */ int pin_1 = 1; int pin_2 = 2; int pin_3 = 3; int pin_4 = 4; int pin_5 = 5; int pin_6 = 6; void setup() { //アノードを、LOWで初期化 pinMode(pin_1, OUTPUT); digitalWrite(pin_1, LOW); pinMode(pin_2, OUTPUT); digitalWrite(pin_2, LOW); pinMode(pin_3, OUTPUT); digitalWrite(pin_3, LOW); //カソードを、HIGHで初期化 pinMode(pin_4, OUTPUT); digitalWrite(pin_4, HIGH); pinMode(pin_5, OUTPUT); digitalWrite(pin_5, HIGH); pinMode(pin_6, OUTPUT); digitalWrite(pin_6, HIGH); } // the loop function runs over and over again forever void loop() { //aが点灯 digitalWrite(pin_1, HIGH); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, LOW); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); }
LEDを点灯
delay(1000);
LEDを消灯
delay(1000);
となっている。
上の考え方を参考にして、A~IまでのLEDを光るようにしたプログラム
/* 3X3 マトリックス ピン番号 1、2、3 プラス(アノード) ピン番号 4、5、6 マイナス(カソード) */ int pin_1 = 1; int pin_2 = 2; int pin_3 = 3; int pin_4 = 4; int pin_5 = 5; int pin_6 = 6; void setup() { //アノードを、LOWで初期化 pinMode(pin_1, OUTPUT); digitalWrite(pin_1, LOW); pinMode(pin_2, OUTPUT); digitalWrite(pin_2, LOW); pinMode(pin_3, OUTPUT); digitalWrite(pin_3, LOW); //カソードを、HIGHで初期化 pinMode(pin_4, OUTPUT); digitalWrite(pin_4, HIGH); pinMode(pin_5, OUTPUT); digitalWrite(pin_5, HIGH); pinMode(pin_6, OUTPUT); digitalWrite(pin_6, HIGH); } // the loop function runs over and over again forever void loop() { //aが点灯 digitalWrite(pin_1, HIGH); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, LOW); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); //bが点灯 digitalWrite(pin_1, HIGH); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, LOW); digitalWrite(pin_6, HIGH); delay(1000); digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); //cが点灯 digitalWrite(pin_1, HIGH); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, LOW); delay(1000); digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); //dが点灯 digitalWrite(pin_1, LOW); digitalWrite(pin_2, HIGH); digitalWrite(pin_3, LOW); digitalWrite(pin_4, LOW); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); //eが点灯 digitalWrite(pin_1, LOW); digitalWrite(pin_2, HIGH); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, LOW); digitalWrite(pin_6, HIGH); delay(1000); digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); //fが点灯 digitalWrite(pin_1, LOW); digitalWrite(pin_2, HIGH); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, LOW); delay(1000); digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); //gが点灯 digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, HIGH); digitalWrite(pin_4, LOW); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); //hが点灯 digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, HIGH); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, LOW); digitalWrite(pin_6, HIGH); delay(1000); digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); //iが点灯 digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, HIGH); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, LOW); delay(1000); digitalWrite(pin_1, LOW); digitalWrite(pin_2, LOW); digitalWrite(pin_3, LOW); digitalWrite(pin_4, HIGH); digitalWrite(pin_5, HIGH); digitalWrite(pin_6, HIGH); delay(1000); }
このタイプのマトリックスLEDも考え方は同じで、どっか回路図、配線図があるはずなので確認をすると
上図と同じように
アノード 3本(1、2,3)
カソード 3本(4,5,6)
となっているか
アノード 3本(4、5,6)
カソード 3本(1,2,3)
となっているかどっちかだと思う
16×16のマトリックスだと、線の数が縦、横、それぞれ8本
合計で16本の線となるが、考え方は、上の3×3と同じ考え方をすればどこでも光らすことが出来る。
Your Message