LESSON 020
4桁7セグメントLEDを光らせる。
4桁7セグメントLEDはLESSON 19で使用した7セグメントLEDを4つ並べた物と同じですが、Aに信号を流すと4つのLEDに同じように電気信号が流れます。
○ 4つの7セグメントLEDで異なる数字を表示させる方法には二つの方法があります。
ダイナミック点灯方式 と スタティック点灯方式
ダイナミック(動的)点灯方式 には 4桁7セグメントLED等があります。
Aに信号を流すと4つのLEDに全てに電気信号が流れます。そこで、DIG1 をOFFにしDIG2からDIG4をONにします。これを順番に前の動作を繰り返すと順番にLEDが点滅します。
上の表のように1から4を高速で切り替えると残像現象で「1234」の表示が見えるようになります。
スタティック(静的)点灯方式 には 7セグメントLED等があります。
この場合LEDは4つ必要になります。
LED 一つに対して8本の信号が必要になります。よって、LEDが4つなら24本の信号が必要になり、これではArduinoでは制御出来ません。
ここの7セグメントLEDに信号を送ります。
4桁7セグメントLEDも、アノードまたはカソードのどちらかが共通端子があります。
7セグメントLEDの横に書かれた記号を検索するとデータシートが表示されるので、カソードコモンかアノードコモンが判ります。
今回はカソードコモンを使用します。
○ Arduinoで4桁7セグメントLEDを制御するなら
・ 12本の信号
・ 74HC595のICを用いて3本 と 各LEDを制御で4本 計7本 (今回はこちら)
拡大すると
次の表の文字が表示出来るようにLEDを点灯させます。
今回はカソードコモンを使用します。
○ Arduinoで4桁7セグメントLEDを制御するなら
・ 12本の信号
・ 74HC595のICを用いて3本 と 各LEDを制御で4本 計7本 (今回はこちら)
拡大すると
次の表の文字が表示出来るようにLEDを点灯させます。
目 次
-
- 構成部品
- 配線図
- スケッチ
- 解説
- 結果
- まとめ
配線図
GPIO 1 ⇒ DIG.1
GPIO 2 ⇒ DIG.2
GPIO 3 ⇒ DIG.3
GPIO 4 ⇒ DIG.4
GPIO 8 ⇒ SER
GPIO 9 ⇒ RCLR
GPIO 10 ⇒ SRCLK
GPIO GND ⇒ -
GPIO 2 ⇒ DIG.2
GPIO 3 ⇒ DIG.3
GPIO 4 ⇒ DIG.4
GPIO 8 ⇒ SER
GPIO 9 ⇒ RCLR
GPIO 10 ⇒ SRCLK
GPIO GND ⇒ -
const int dig1 = 1;
const int dig2 = 2;
const int dig3 = 3;
const int dig4 = 4;
const int SER = 8;
const int RCLK = 9;
const int SRCLK = 10;
int t = 6;
const int dataA[]={1,2,3,4};
byte dataB[] = {
B01110111,
B00010100,
B10110011,
B10110110,
B11010100,
B11100110,
B11100111,
B01110100,
B11110111,
B11110100,
B11110101,
B11000111,
B01100011,
B10010111,
B11100011,
B11100001,
};
void setup() {
pinMode(dig1, OUTPUT);
pinMode(dig2, OUTPUT);
pinMode(dig3, OUTPUT);
pinMode(dig4, OUTPUT);
pinMode(SRCLK, OUTPUT);
pinMode(RCLK, OUTPUT);
pinMode(SER, OUTPUT);
}
void loop() {
for ( int i=0; i<4; i++ ) {
if (i==0){digitalWrite(dig1,LOW);} else {digitalWrite(dig1,HIGH);}
if (i==1){digitalWrite(dig2,LOW);} else {digitalWrite(dig2,HIGH);}
if (i==2){digitalWrite(dig3,LOW);} else {digitalWrite(dig3,HIGH);}
if (i==3){digitalWrite(dig4,LOW);} else {digitalWrite(dig4,HIGH);}
shiftOut(SER,SRCLK, MSBFIRST, dataB[dataA[i]]);
digitalWrite(RCLK, LOW);
digitalWrite(RCLK, HIGH);
delay(t);
}
}
リンク
解説
- void loop()
for ( int i=0; i<4; i++ ) {
if (i==0){digitalWrite(dig1,LOW);} else {digitalWrite(dig1,HIGH);}
if (i==1){digitalWrite(dig2,LOW);} else {digitalWrite(dig2,HIGH);}
if (i==2){digitalWrite(dig3,LOW);} else {digitalWrite(dig3,HIGH);}
if (i==3){digitalWrite(dig4,LOW);} else {digitalWrite(dig4,HIGH);}
配列とif文でダイナミック点灯方式をコンパクトにまとめてみましたダイナミック点灯方式で4桁7セグメントで各桁の切り替える秒数は6ms以下でチラツキ無く表示出来ます。
○ 動画で初めの方がは4桁が同じ番号を表示しましたが、DIG1からDIG4をOFFに固定した場合はスタティック点灯方式になりますが4桁とも同じ数字を出す必要がありませんよね。ですから、DIG1からDIG4のOFFとONを切り替えることによりダイナミック点灯方式になります。この方式によりそれぞれの桁の値を変えることが可能になります。
○ Arduino を 学ぶ上で書籍やWebpageを参考に作っていますが、私なりに噛み砕いて書いているつもりですが、判らない点がありましたら連絡下さい。