【電子工作】1-5.Arduinoで4桁の7セグLEDを制御しよう

 

今回は、4桁の7セグLEDを制御します。

 

 

 

 

さて、今回使う4桁の7セグLED とは、こんなデバイスです。

 

 

 

制御方法を説明するには、

4桁7セグのLEDの回路がどうなっているかを

理解する必要があります。

 

回路は・・・こうです。

 

 

わかりにくい・・・

 

これを、4桁7セグLEDの端子とつなげると、

こんな感じですね。

 

 

 

もっと理解しやすくするには、

 

 一桁のセグをこんな感じで並べたイメージです。

    

         D1           D2           D3           D4

 

このA~FまでとDotが、4桁とも共通になっていて、

COMが、D1~D4の4桁で分かれているのです。

 

 

1桁の7セグをの表示をしている状態で、D1のみを表示させると、

 

  

 

1桁の7セグを2の表示をしている状態で、D2のみを表示させると、

  

 

1桁の7セグをの表示をしている状態で、D3のみを表示させると、

  

 

1桁の7セグを0の表示をしている状態で、D4のみを表示させると、

  

 

 

簡単ですね!

 

 

さて、4桁同時表示するには・・・・

 

1桁の7セグをの表示をしている状態で、

D1~D4すべて出力にするとどうなるでしょうか・・

 

 

こうなっちゃいます。

 

答えからすると、完全に同時出力できないんです。

 

 

では、どうするのか?

 

人間の目は、残像を認識することができます。

 

テレビとかパラパラ漫画の原理です。

 

要するに

高速で↓これを繰り返すのです。

 

 

マイコンはマイクロ秒以上の速度で処理ができます。

 

Arduinoのdelay(ms); APIは、ミリ秒単位で待機できますので、

ミリ秒単位で桁表示を切り替えてやればいいのです。

 

さすれば、このように見えるようになります。

 

※5ms単位で切り替えてみました。

 

 

コードのイメージはつきましたか?

 

一つ注意点としては、

今回使用した7セグLEDは、

LEDの素子方向が反対でした。

 

A~Fピン側をHIGH、D1~D3側をLOWにする必要があります。


その点だけ注意してコードを思い浮かべてください。

 

 

模範解答としてはこんな感じになります。

途中TIMER_DELAYの数字を変えることで、切り替えスパンを変更できます。

 

初めは1000とかにすると、イメージがしやすいかと思います。

 

回路図ですが、詳細知りたい方は

コメントいただければアップで撮影しますので、コメントで言ってください。

 

宇宙人しっぽ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人あたま

/*
 * Author: SAI
 */
/* *** Define 定義 *** */
//      A
//     ----
//  F | G  |B
//     ----
//  E |    |C
//     ----    . Dot
//      D


const int ASeg = 13;
const int BSeg = 12;
const int CSeg = 11;
const int DSeg = 10;
const int ESeg = 9;
const int FSeg = 8;
const int GSeg = 7;
const int DotSeg = 6;

const int Keta1Seg = 5;
const int Keta2Seg = 4;
const int Keta3Seg = 3;
const int Keta4Seg = 2;

const int LED_ON = LOW;
const int LED_OFF = HIGH;

const int LED_KETA_ON = HIGH;
const int LED_KETA_OFF = LOW;
// delay(ms) /
const int TIMER_DELAY = 5;


/* initial setting 初期設定 */
 void setup() {
  /* IO output setting  IO出力設定 7Seg用端子を出力 */
  pinMode(ASeg, OUTPUT);
  pinMode(BSeg, OUTPUT);
  pinMode(CSeg, OUTPUT);
  pinMode(DSeg, OUTPUT);
  pinMode(ESeg, OUTPUT);
  pinMode(FSeg, OUTPUT);
  pinMode(GSeg, OUTPUT);
  pinMode(DotSeg, OUTPUT); 

  pinMode(Keta1Seg, OUTPUT);
  pinMode(Keta2Seg, OUTPUT);
  pinMode(Keta3Seg, OUTPUT);
  pinMode(Keta4Seg, OUTPUT);

  digitalWrite(Keta1Seg, LED_KETA_OFF);
  digitalWrite(Keta2Seg, LED_KETA_OFF);
  digitalWrite(Keta3Seg, LED_KETA_OFF);
  digitalWrite(Keta4Seg, LED_KETA_OFF);
    
}

//Display function 0
void zero() {
  digitalWrite(ASeg, LED_ON);
  digitalWrite(BSeg, LED_ON);
  digitalWrite(CSeg, LED_ON);
  digitalWrite(DSeg, LED_ON);
  digitalWrite(ESeg, LED_ON);
  digitalWrite(FSeg, LED_ON);
  digitalWrite(GSeg, LED_OFF);
}

//Display function 1
void one() { 
  digitalWrite(ASeg, LED_OFF);
  digitalWrite(BSeg, LED_ON);
  digitalWrite(CSeg, LED_ON);
  digitalWrite(DSeg, LED_OFF);
  digitalWrite(ESeg, LED_OFF);
  digitalWrite(FSeg, LED_OFF);
  digitalWrite(GSeg, LED_OFF);
}

//Display function 2
void two() {
  digitalWrite(ASeg, LED_ON);
  digitalWrite(BSeg, LED_ON);
  digitalWrite(CSeg, LED_OFF);
  digitalWrite(DSeg, LED_ON);
  digitalWrite(ESeg, LED_ON);
  digitalWrite(FSeg, LED_OFF);
  digitalWrite(GSeg, LED_ON);
}

//Display function 3
void three() {
  digitalWrite(ASeg, LED_ON);
  digitalWrite(BSeg, LED_ON);
  digitalWrite(CSeg, LED_ON);
  digitalWrite(DSeg, LED_ON);
  digitalWrite(ESeg, LED_OFF);
  digitalWrite(FSeg, LED_OFF);
  digitalWrite(GSeg, LED_ON);
}

//Display function 4
void four() {
  digitalWrite(ASeg, LED_OFF);
  digitalWrite(BSeg, LED_ON);
  digitalWrite(CSeg, LED_ON);
  digitalWrite(DSeg, LED_OFF);
  digitalWrite(ESeg, LED_OFF);
  digitalWrite(FSeg, LED_ON);
  digitalWrite(GSeg, LED_ON);
}

//Display function 5
void five() {
  digitalWrite(ASeg, LED_ON);
  digitalWrite(BSeg, LED_OFF);
  digitalWrite(CSeg, LED_ON);
  digitalWrite(DSeg, LED_ON);
  digitalWrite(ESeg, LED_OFF);
  digitalWrite(FSeg, LED_ON);
  digitalWrite(GSeg, LED_ON);
}

//Display function 6
void six() {
  digitalWrite(ASeg, LED_ON);
  digitalWrite(BSeg, LED_OFF);
  digitalWrite(CSeg, LED_ON);
  digitalWrite(DSeg, LED_ON);
  digitalWrite(ESeg, LED_ON);
  digitalWrite(FSeg, LED_ON);
  digitalWrite(GSeg, LED_ON);
}

//Display function 7
void seven() {
  digitalWrite(ASeg, LED_ON);
  digitalWrite(BSeg, LED_ON);
  digitalWrite(CSeg, LED_ON);
  digitalWrite(DSeg, LED_OFF);
  digitalWrite(ESeg, LED_OFF);
  digitalWrite(FSeg, LED_OFF);
  digitalWrite(GSeg, LED_OFF);
}

//Display function 8
void eight() {
  digitalWrite(ASeg, LED_ON);
  digitalWrite(BSeg, LED_ON);
  digitalWrite(CSeg, LED_ON);
  digitalWrite(DSeg, LED_ON);
  digitalWrite(ESeg, LED_ON);
  digitalWrite(FSeg, LED_ON);
  digitalWrite(GSeg, LED_ON);
}

//Display function 9
void nine() {
  digitalWrite(ASeg, LED_ON);
  digitalWrite(BSeg, LED_ON);
  digitalWrite(CSeg, LED_ON);
  digitalWrite(DSeg, LED_ON);
  digitalWrite(ESeg, LED_OFF);
  digitalWrite(FSeg, LED_ON);
  digitalWrite(GSeg, LED_ON);
}

//Display function Keta1
void Keta1() {
  digitalWrite(Keta1Seg, LED_KETA_ON);
  digitalWrite(Keta2Seg, LED_KETA_OFF);
  digitalWrite(Keta3Seg, LED_KETA_OFF);
  digitalWrite(Keta4Seg, LED_KETA_OFF);
}
//Display function Keta2
void Keta2() {
  digitalWrite(Keta1Seg, LED_KETA_OFF);
  digitalWrite(Keta2Seg, LED_KETA_ON);
  digitalWrite(Keta3Seg, LED_KETA_OFF);
  digitalWrite(Keta4Seg, LED_KETA_OFF);
}
//Display function Keta3
void Keta3() {
  digitalWrite(Keta1Seg, LED_KETA_OFF);
  digitalWrite(Keta2Seg, LED_KETA_OFF);
  digitalWrite(Keta3Seg, LED_KETA_ON);
  digitalWrite(Keta4Seg, LED_KETA_OFF);
}
//Display function Keta4
void Keta4() {
  digitalWrite(Keta1Seg, LED_KETA_OFF);
  digitalWrite(Keta2Seg, LED_KETA_OFF);
  digitalWrite(Keta3Seg, LED_KETA_OFF);
  digitalWrite(Keta4Seg, LED_KETA_ON);
}


/* Mail loop 通常処理(繰り返し) */
void loop() {

  /* TIMER_DELAYごとに各桁を表示 */
  zero();
  Keta1();
  delay(TIMER_DELAY);
  one();
  Keta2();
  delay(TIMER_DELAY);
  two();
  Keta3();
  delay(TIMER_DELAY);
  three(); 
  Keta4();
  delay(TIMER_DELAY);
}

宇宙人しっぽ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人からだ宇宙人あたま

 

 

SAIでした。

フォローしてね…