【Arduino】 4桁7セグメントLEDを光らせる。 

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​
USBケーブル​
ブレッドボード​
74HC595
4桁 7セグメントLED​
抵抗​ 220Ω
ジャンパー線
   
配線図   

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  ⇒   -

         

スケッチ《 test017》
   
   
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を参考に作っていますが、私なりに噛み砕いて書いているつもりですが、判らない点がありましたら連絡下さい。

目次