\ AmazonにてArduino UNO R4 発売中!! /

Arduino 入門 Lesson 25 【4桁7セグメントLED編】

arduino-lesson25-00 Arduino入門編
記事に広告(アフィリエイト広告)が含まれています。
スポンサーリンク
子供と一緒に始める マイコンプログラム
Arduino 入門
Lesson 25
【4桁7セグメントLED編】

「Arduino」を使ったマイコンプログラミングを子供と一緒に学習するブログ。

少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。

更新情報1:回路図を掲載しました。
更新情報2:スケッチを一部修正しました。
※コメントの指摘事項を修正

 

本記事はLesson 25 【4桁7セグメントLED編】です。

4桁7セグメントLEDは、Lesson 24で説明した7セグメントLEDが1つのモジュールとなったものです。

そのため、基本原理は1桁の7セグメントLEDと同じです。

 

数字情報の表示に特化したデジタル表示モジュール。

4桁あれば、デジタル時計を作れそうですね。

 

Arduino入門編の解説にて使用しているArduinoは互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

正規品の本体単品がほしい方はこちらとなります。

 

スポンサーリンク

はじめに

4桁7セグメントLEDは1桁7セグメントLEDを4つをあわせてモジュール化したものです。

1桁の場合と違い、制御方法にちょっとしたコツが・・・

おそらく力技だな~と思う方法で4桁を表示させています。

 

その制御方法が「ダイナミック点灯方式」。

LED を 1Hz 程度の周波数で点滅させると人の目には LED の点滅が認識できます。

しかし、点滅周波数を100Hz 程度にあげると、人の目には LED が連続して点灯しているように見えます。
※要は点滅せずに、ず~っと点灯しているように見えるということです。

ダイナミック点灯方式は、このような人の目の性質を利用した点灯方式です。

 

4桁の7セグメントLEDを1桁づつ高速で繰り返し点灯させることで、あたかも4桁全てが同時に見えるようにしているのです。

ダイナミック点灯方式のメリット
複数桁の7セグメントLEDを少ないポート数で制御できる!

 

別の表現をすると「残存効果」と呼ばれるものです。

Wikipedia 残存効果

残像効果(ざんぞうこうか)は、主に人の視覚で光を見たとき、その光が消えた後も、それまで見ていた光や映像が残って見えるような現象のこと。

 

1桁の7セグメントLED同様にアノードコモンとカソードコモンがあります。

個人的な好みとしては、カソードコモンです。
点灯させたい箇所に信号を与えたいため。

 

4桁7セグメントLED、1桁と同様に日本製は割高です。

手持ちがなく、遊びで使う程度であれば以下などいかがでしょうか。

Amazonにて探したのですが4桁セグメントLEDの種類があまりありません・・・。

下記であれば、Amazon発送で1個あたり、200円程度です。
※最近、Amazonの中華電子部品は新部品、在庫も少なく値上がりしている気がします。

カソードコモンなので、管理人の好みです。

 

Lesson 25 目標

1.「4桁7セグメントLED」の原理を理解します。
2.「ダイナミック点灯方式」の制御方法を理解します。
3.8bitシフトレジスタの使い方を思い出す。

今回も遊ぶことを最大の目標に楽しみましょう!

 

項目3の8bitシフトレジスタに関しては、Lesson 20をお読みいただく理解が深まります。

 

8bitシフトレジスタを使用したくない。

または、持っていない方。

Aruduinoのデジタル入出力ピンで同じことができます。

ぜひ、挑戦してみてください。

 

また、4桁の前に1桁で動作を確認した方がより理解が深まると考えます。

 

準備

ではLessonの準備に取り掛かりましょう。

今回も8個×4のLEDを制御することから部品が多めです。

頑張って組み上げていきましょう。

 

必要なもの

Lesson 24と違いは4桁7セグメントLEDのみです。

 

7セグメントLEDはアノードコモン、カソードコモンの2種類があります。

本Lessonで使用しているのは、カソードコモン
※本記事、原理の項目で違いを詳しく説明します。

 

Jumper wire、抵抗は今後も頻繁に利用します。

Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。

短めが使いやすい場合も。

 

抵抗も単品で揃えるよりはセットをおすすめします。

 

抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!

という方は、「電子工作基本部品セット」が使い勝手が良い。

 

使用部品説明

新たに登場した部品について説明していきます。

本Lessonで新しく登場するのは、4桁セグメントLEDのみです。

 

4桁7セグメントLED 実物写真

下の写真が、4桁7セグメントLEDです。
※表面のフィルムを剥がしていない状態です。

 

■表面

arduino-lesson25-01

 

■裏面

arduino-lesson25-02

 

ちなみに、ELEGOO UNO キットには合わせて梱包されています。

4桁7セグメントLEDはLEDですから向きがあります。
アノードコモン、カソードコモンどちらなのか確認して購入してください。
詳しくは原理の項目にて説明します。

 

4桁7セグメントLED 仕様

本Lessonで仕様について説明しておきます。

型名は5461AS。

まずは絶対最大定格から。

これを超えると壊れる可能性がありますっていう値です。

絶対最大定格(@25℃) 単位
Forward current 30 mA / seg
Peak forward current(1/10 Duty Cycle) 120 mA / seg
Reverse voltage 5 V / seg
Power consumrtion 80 mW / seg

 

続いて電気的特性

7セグメントLEDの特性です。

電気的特性(25℃) 単位
Wavelength at peak emission 635 nm
Forward voltage(Typ.) 2.1 V(@IF = 20mA)
Reverse current 20 μA

 

本Lessonで気にするべきところは、絶対最大定格値の30mAです。

これを超えると壊れますので、抵抗にて調整しましょう。

 

輝度に関しては、20mAで最大輝度に近い値を得ることができます。

といっても、それより低い値でも十分です。

この型番の電流に対する輝度のグラフを確認したところ、5mA程度でも1/3程度の輝度が得られると考えます。

 

4桁7セグメントLED 原理

4桁7セグメントLEDの1桁部分は、1桁7セグメントLEDと原理は同じです。

8個のLEDが表示部にそれぞれ割り当てられているだけの単純なもの。
※割り当てられている番号が異なるだけです。

 

下図に4桁7セグメントLEDの原理とピン配置を示します。

図に示すように、「アノードコモン」と「カソードコモン」の2種類のタイプがあります。

それぞれ、アノード(+)が共通のもの、カソード(-)が共通のものになります。

1桁7セグメントLEDとの違いは、コモン端子が各桁に1本づつあるというだけです。
※割り当てられている番号は異なりますが原理は同じ。

 

1桁7セグメントLEDで4桁7セグメントLEDを作ることも可能です。
①1桁7セグメントLEDを4つ並べる。
②a~D.P端子を各桁で共通にする。

 

arduino-lesson25-03

 

管理人はコードを書くときに「カソードコモン」の方がイメージしやすいと考えます。

1.カソード(-)側をGNDで共通。
2.光らせたいLEDにデジタルピンから5Vを供給。

という使い方がイメージしやすいですよね。

電圧を与えることで、電流が流れてLEDが光るというイメージです。

 

絶対定格、順方向電圧、光度など詳細を知りたい方は、購入した4桁7セグメントLEDの仕様書を確認ください。

仕様書がない場合、秋月電子などで確認することができます。

下記「秋月電子」TOPページのキーワード検索にて、通販コード「I-03955」で検索ください。
※あくまでも一例です。値はご自身が購入したものの仕様に従ってください。

403- 現在メンテナンス中です。

 

0から9の数字の表現方法

0~9の表現方法は1桁7セグメントLEDと同じです。

下記に、表を掲載しておきます。

表の数字
1:電流を流してLED点灯

0:電流を流さずLED消灯

 

DisplayとLEDの関係が下記表となります。

Display a(11) b(7) c(4) d(2) e(1) f(10) g(5)
0 1 1 1 1 1 1 0
1 0 1 1 0 0 0 0
2 1 1 0 1 1 0 1
3 1 1 1 1 0 0 1
4 0 1 1 0 0 1 1
5 1 0 1 1 0 1 1
6 1 0 1 1 1 1 1
7 1 1 1 0 0 1 0
8 1 1 1 1 1 1 1
9 1 1 1 1 0 1 1

上記の他に、右下のドット(D.P)があります。

ドッドのみ表示させたい場合は

a~gを「0」、D.P(3)を「1」で点灯します。

消灯は「0」となります。

 

使用する抵抗について

LEDが焼き切れないようにするため、LEDと直列につなぐ電流制限抵抗は220Ωとします。

こちらは、LEDが焼き切れない抵抗値であれば220Ωである必要はありません。

 

この抵抗ですが、カソード側のコモン端子に抵抗を入れることで4本にすることも可能です。

補足情報:カソード側のコモン端子に抵抗を入れることについて
入れることは可能ですが推奨しません!
ダイオードの順方向電圧Vfのバラツキの影響により電流が均等に流れずに輝度がバラバラになると思います。

どちらに入れるにしても、電流値は計算しましょう。

例えば、LEDの絶対最大定格は30mA程度だとした場合、それ以下にする必要があります。

 

電流計算時の注意点
本Lessonでは、同時に4桁を点灯させることはしません。
ダイナミック点灯方式を利用します。
点灯するのは、あくまでも一桁のみです。
計算する電流値は上記が前提となります。

 

単純に計算してみます。

シフトレジスタの出力は5V。

LEDと220Ωの抵抗が直列につながっていますので

5V  / 220Ω = 約22.7mA

となり、最大でも30mA以下であることから壊れることはありません。

 

ダイオードの順方向電圧を考慮した場合以下となります。

仕様から2.1V(Typ.)となっています。

これを考慮すると・・・

( 5V – 2.1V ) / 220Ω = 約13.2mA

となり、220Ωで問題ないことがわかります。

 

あくまでも、点灯するのは1桁ということに注意してください。

 

SN74HC595N 8bitシフトレジスタ 出力の割り当て

下の写真が、8bitシフトレジスタ「SN74HC595N」です。

Lesson 20にて詳細を説明しています。

Arduino-lesson20-01

 

端子は全部で16ピンあります。

メーカのデータシートによって端子名は異なります。

Arduino-lesson20-02

 

本記事のコードは、「SN74HC595N」の出力QA~QH7セグメントLEDに対して以下の割り当てをしました。

SN74HC595N 7セグメントLED
QA(Q0) a(11)
QB(Q1) b(7)
QC(Q2) c(4)
QD(Q3) d(2)
QE(Q4) e(1)
QF(Q5) f(10)
QG(Q6) g(5)
QH(Q7) D.P(3)
桁の選択 6,8,9,12
Arduinoで制御する場合はデジタルピンなどに接続

QA~QHの出力が「1」となることでLEDに電流を流して4桁7セグメントLEDを点灯させます。

()内の表記は、次に示す回路図での番号となります。

 

実践 回路作成とコード作成

最初に回路図を確認してください。

次に、回路図に合わせて部品を接続します。

最後にコードを書いて、4桁7セグメントLEDを動かしていきましょう。

 

Arduinoのピン配置を確認したい方は番外編02を参照してください。

 

回路図

4桁7セグメントLEDとの間に抵抗が直列に接続されていることで電流を制限しLEDが焼損するのを防いでいます。

回路図がこちら。

カソードコモン(GND)になっていることに注意してください。

 

arduino-lesson25-04

 

こちらがブレッドボード図。
※M-M jumper wireのみで結線できます。

 

arduino-lesson25-05

 

回路図は「fritzing」を利用しています。

「fritzing」の使い方は下記を参照してください。

 

接続

下図に示すように、用意した部品を使用して接続しましょう。

部品は4桁7セグメントLED抵抗シフトレジスタとなります。

M-M jumper wireを使用してUNOと接続しましょう。

 

使用するポートは、デジタルピンの「1,2,3,4,9,11,12」、電源の「5V」、「GND」です。

穴に挿入しづらいときは、ラジオペンチなどを使用してください。

arduino-lesson25-06

 

コードの書き込み

接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。

コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。

 

コマンド説明

特に新しくでてきたコマンドはありませんが、重要コマンドを復習しておきましょう。

コマンド 説明
shiftOut(dataPin, clockPin, bitOrder, value) 1バイト分のデータを1ビットずつ「シフトアウト」する。
最上位ビット(MSB)と最下位ビット(LSB)のどちらからもスタート可能。
各ビットはまずdataPinに出力され、その後clockPinが反転して、そのビットが有効になったことが示されます。
dataPin:各ビットを出力するピン
clockPin:
クロックを出力するピン。
dataPinに正しい値がセットされたら、このピンが1回反転します
bitOrder:
MSBFIRSTまたはLSBFIRSTを指定。
Most Significant Bit Firstは最上位ビットから送ること、Least Significant Bit Firstは最下位ビットから送ることを示す。
value:送信したいデータ (byte)
戻り値:なし

 

shiftOut関数を理解すると、何かと便利です。

理解しておくことをお勧めします。

 

サンプルコード

サンプルコードを下記に示します。

Lesson 24のコードを改良して作成しました。

デジタル入出力ピンの1,2,3,4を利用して点灯させる桁を選択しています。

//Lesson 25 4桁7セグメントLED ダイナミック点灯方式を体感
//https://omoroya.com/


// 74HC595 pin        QA,QB,QC,QD,QE,QF,QG,QH 
// 7segment Mapping   a, b, c, d, e, f, g ,D.P

int tDelay = 100;   // 100ms遅延設定←ここの時間を短くしていく。
int rclkPin = 11;   // (11) ST_CP [RCLK] on 74HC595
int srclkPin = 9;   // (9)  SH_CP [SRCLK] on 74HC595
int dsPin = 12;     // (12) DS [SER] on 74HC595
int dig1 = 1;       // DIG1を1番ピンに割り当て
int dig2 = 2;       // DIG2を2番ピンに割り当て
int dig3 = 3;       // DIG3を3番ピンに割り当て
int dig4 = 4;       // DIG4を4番ピンに割り当て

// seven_ledsをbyte型として定義
// 配列にDisplay表示用のデータ0~9と全消灯を設定
// 1 = LED on, 0 = LED off
byte seven_leds[12] =       { B11111100,  // 0
                              B01100000,  // 1
                              B11011010,  // 2
                              B11110010,  // 3
                              B01100110,  // 4
                              B10110110,  // 5
                              B10111110,  // 6
                              B11100000,  // 7
                              B11111110,  // 8
                              B11100110,  // 9
                              B00000001,  // D.P 
                              B00000000,  // OFF
                             };

//シフトレジスタ部分を関数化
void funcShiftReg(int x)
{
  digitalWrite(rclkPin, LOW);                         //送信中のRCLKをLowにする
  shiftOut(dsPin, srclkPin, LSBFIRST, seven_leds[x]); //シフト演算を使って点灯するLEDを選択
  digitalWrite(rclkPin, HIGH);                        //送信終了後RCLKをHighにする
}
  
void setup() 
{
  pinMode(rclkPin, OUTPUT);   //11番ピンをOUTPUTとして定義
  pinMode(dsPin, OUTPUT);     //12番ピンをOUTPUTとして定義
  pinMode(srclkPin, OUTPUT);  //9番ピンをOUTPUTとして定義
  pinMode(dig1, OUTPUT);      //1番ピンをOUTPUTとして定義
  pinMode(dig2, OUTPUT);      //2番ピンをOUTPUTとして定義
  pinMode(dig3, OUTPUT);      //3番ピンをOUTPUTとして定義
  pinMode(dig4, OUTPUT);      //4番ピンをOUTPUTとして定義
  digitalWrite(dig1, HIGH);    //1番ピンをHIGH DI1 OFF
  digitalWrite(dig2, HIGH);    //2番ピンをHIGH DI2 OFF
  digitalWrite(dig3, HIGH);    //3番ピンをHIGH DI3 OFF
  digitalWrite(dig4, HIGH);    //4番ピンをHIGH DI4 OFF
  funcShiftReg(11);           //信号初期化
}

void loop() 
{
  //DIG1の表示
  delay(tDelay);
  digitalWrite(dig1, LOW); 
  digitalWrite(dig2, HIGH);
  digitalWrite(dig3, HIGH);
  digitalWrite(dig4, HIGH);
  //DIG1に1を表示
  funcShiftReg(1);
  delay(tDelay);
  funcShiftReg(11);

  
  //DIG2の表示
  delay(tDelay);
  digitalWrite(dig1, HIGH); 
  digitalWrite(dig2, LOW);
  digitalWrite(dig3, HIGH);
  digitalWrite(dig4, HIGH);
  //DIG2に2を表示
  funcShiftReg(2);
  delay(tDelay);
  funcShiftReg(11);


  //DIG3の表示
  delay(tDelay);
  digitalWrite(dig1, HIGH); 
  digitalWrite(dig2, HIGH);
  digitalWrite(dig3, LOW);
  digitalWrite(dig4, HIGH);
  //DIG3に3を表示
  funcShiftReg(3);
  delay(tDelay);
  funcShiftReg(11);


  //DIG4の表示
  delay(tDelay);
  digitalWrite(dig1, HIGH); 
  digitalWrite(dig2, HIGH);
  digitalWrite(dig3, HIGH);
  digitalWrite(dig4, LOW);
  //DIG4に4を表示
  funcShiftReg(4);
  delay(tDelay);
  funcShiftReg(11);

}

 

動作確認

では、さっそく動作を確認していきます。

コード内のtDelayの値を変えてみてください。

int tDelay = 100; // 100ms遅延設定←ここの時間を短くしていく。

この時間を、100、5、1と変えてみてください。

実際は、1桁づつ表示していますが時間を速くすることで4桁表示になっているのがわかるはずです。

​今回もgifで動作を掲載してみました。
※サイズを絞るために、画像サイズを小さくしています。

int tDelay = 100; // 100ms遅延設定

arduino-lesson25-07

 

int tDelay = 1; // 1ms遅延設定

arduino-lesson25-08

 

まとめ

今回は以下の内容について理解してもらいました。

今回も項目4の遊ぶことが一番の目標でした。

1.「4桁7セグメントLED」の原理を理解します。
2.「ダイナミック点灯方式」の制御方法を理解します。
3.  8bitシフトレジスタの使い方を思い出す。
4.  楽しんで遊ぶ。

 

いかがだったでしょうか。

ダイナミック点灯方式がどんなものか理解していただけたでしょうか。

実は、1桁づつ表示してたんだな・・・

と街中で見かけたら思い出してみてください!

 

Lesson 25 【4桁7セグメントLED編】 はここまで。

4桁7セグメントLED、デジタル時計などを作って見るのもおもしろそうです。

いずれ挑戦します!

 

疑問点、質問などありましたら気軽にコメントください。

 

次回、Lesson 26は【DCモーター編】 です。

Arduino 入門 Lesson 26 【DCモータ編】
本記事はLesson 26 【DCモーター編】です。DCモーターはミニ4駆やラジコンなど、おもちゃに使われています。モーターそのものですので制御回路などは組み込まれていません。本Lessonでは、DCモーターを制御することでミニ扇風機を作成…

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れ、間違いなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編で使用しているUNOはAmazonにて購入可能です。

互換品とは言え、Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

 

Amazonでお得に買う方法

Amazonでお得に購入するなら、Amazonギフト券がおすすめです。

現金でチャージするたびに、チャージ額に応じたポイントが付与されます。

最大2.5%!!!(Amazonプライム会員ならさらにお得)

チャージ額(一回分) 一般 プライム会員
5,000円~19,999円 0.5% 1.0%
2,0000円~39,999円 1.0% 1.5%
40,000円~89,999円 1.5% 2.0%
90,000円~ 2.0% 2.5%

さらに、初回チャージで1000ポイントもらえるキャンペーンも実施中!

\Amazonギフト券 1000ポイントキャンペーン/
Amazonチャージ 初回購入で1000ポイントキャンペーン

 

補足情報
コンビニ・ATM・ネットバンクが対象
購入は1円単位で可能

コメント

  1. kame より:

    こちらの記事、大変参考になりました。
    現在「.(ドット)」の表示方法について苦戦中です。
    どうしたらよろしいでしょうか?

    • omoroya omoroya より:

      コメントありがとうございます。
      ドットはa~gを「0」、D.P(3)を「1」で点灯します。
      お試しください。

  2. いわ より:

    楽しく読ませていただいています。
    カソード側に抵抗をつけて全部で4つの抵抗にした場合について1つ質問です。

    アノード側につけて抵抗8つの場合と比較して、
    光らせるセグメントが複数のときに抵抗に流れる電流が大きくなるのでしょうか。

    • omoroya omoroya より:

      コメントありがとうございます。
      ダイオードを無視して考えていただくとわかりやすいかと思います。
      同じ抵抗値を利用した場合、1個の抵抗に流れる電流値は同じになると思います。
      ダイオードを無視すれば、抵抗の両端にかかる電圧は5Vで変わらないからです。
      ただし、カソード側のコモン端子に入れることはお勧めしません。
      (記事中では入れることもできますとは言っていますが・・・)
      ダイオードの順方向電圧Vfのバラツキの影響が見えるようになり電流が均等に流れずに輝度がバラバラになると思います。
      試してみるとわかるかと思います!
      記事にも一言かいておきます。

    • 匿名 より:

      わからない

    • omoroya omoroya より:

      コメントありがとうございます。
      わからないときは、飛ばしてほかの電子部品で遊びましょう!

  3. 渡辺 より:

    omoroya って見やすいです。これからもよろしくお願いします。

    • omoroya omoroya より:

      コメントありがとうございます。
      そう言っていただけると、続ける気力が保てます。
      ありがとうございます。

  4. レジスタ初心者 より:

    シフトレジスタを使うのが初めてでプログラムをコピペさせてもらいました。
    しかし、「2222」と表示されしまいます。
    また、左1つ目の2は上の「a」の部分が消えてしまい、
    左2つ目は右上の「b」の部分が消えてしまいます。
    原因が突き止められません。教えていただけますか。

    • omoroya omoroya より:

      コメントありがとうございます。
      スケッチをコピーしている場合は、回路結線の間違いが考えられます。
      こちらで、もう一度、回路を組んでスケッチを動かしてみましたが正しく動作しています。
      念のため記事のページをリロードしてスケッチをもう一度コピペしてみてください。
      おそらくですが、カソードコモン側で表示する桁の場所を決めていますので
      そこの結線がおかしくないでしょうか?ご確認ください。
      Frizingで描いたブレッドボード図通りになっているか、今一度確認いただければと思います。
      それでもダメな場合、どれかの部品が壊れている可能性もあります。

  5. 小野 より:

    こんにちは!アルディーノUnoと点灯する桁を選択する用のnpnトランジスタ4個とカソードコモン型4桁7セグメントLED(16本足がある)と抵抗を使って4桁の数字を0000〜9999までカウントアップするようなプログラムを書きたいのですが、よろしければどうすればいいか教えていただきたいです。

    • omoroya omoroya より:

      コメントありがとうございます。
      下記、型番などわかりますでしょうか?
      カソードコモン型4桁7セグメントLED(16本足がある)

  6. tac3210 より:

    こんばんは!

    Arduino入門者に有用なページを作成されていること
    素晴らしいと思います。今後も発展を願っています。

    ところで、7セグメント4桁LED、カリマスさんがコメント
    しているようにOFFになっているセグメントがうっすら点灯
    するようなスケッチになっています。

    コモンカソードを1桁目だけON(LOWレベル)にしてアノード
    セグメントを1桁目のパターンでON(HIGHレベル)して
    表示し、deleyで時間稼ぎ、
    そのあと次のコモンカソード2桁目だけONしたときに
    2桁目のLEDが1桁目のパターンで点灯します。
    そのあと2桁目のパターンでON(HIGHレベル)してますので
    一瞬1桁目パターンのちらつきが2桁目に確認できるはずです。

    解決策は次の桁に移る前に、アノード側またはカソード側を
    (両方共はやりすぎでどちらかだけでOK)すべてOFFにする
    ことです。

    他に気になった点はsetup()内の初期処理でコモンカソード
    4桁をすべてOFFにするつもりでLOWレベルにしてますが
    HIGHレベルがOFFとなります。
    また空白表示のfuncShiftReg(12); は配列の範囲外で
    funcShiftReg(11);でないといけません。

    • omoroya omoroya より:

      コメントありがとうございます。
      funcShiftReg(12);は11に修正しておきました。
      ありがとうございます。
      チラツキに関しても改善点記載いただきありがとうございます。
      他の方の参考になるので助かります。
      この、Lessonはdelayを短くすることでダイナミック方式を体感することを目的にしています。
      このLessonを元に色々と遊び、試行錯誤して目的のスケッチになれば幸いです。
      時間を見つけてセグメントLED系のLessonを増やせればと思っています。
      実は、手元に色々な種類のセグメントLEDを持っているのですが・・・記事にできていません。

  7. 匿名 より:

    フォトトランジスタと赤外線LEDのセンサーで物を感知した時に7セグメント4桁LEDでカウントアップするようにしたいのですが教えてください

    • omoroya omoroya より:

      コメントありがとうございます。
      やり方は色々あるかと思いますが。
      ・センサーで検知するたびにインクリメント
      ・インクリメントした数値を計算もしくは文字列処理のいずれかで各桁の数値を一桁の数値とする
      ・その数値をセグメントに表示させる
      といった流れになります。

  8. カリマス より:

    初めてのコメント書き込みですので乱筆恐縮です。
    私の環境ではチラつきが発生(表示したくないセグメントがうっすらと光る現象)
    しまして、
    byte ledsoff ={B00000000};
    を宣言して

    void funcledsoff()
    {
    digitalWrite(rclkPin, LOW);
    shiftOut(dsPin, srclkPin, LSBFIRST, ledsoff);
    digitalWrite(rclkPin, HIGH);
    }
    を関数化して

    funcledsoff()を
    各funcShiftReg(x); //xは1~4
    の後に記述したら改善しました。
    ただ明度が下がり、暗くなってしまったので抵抗をもちょっと小さくしたかったのですが私の環境では既に半田付け後で後の祭りでした。

    • omoroya omoroya より:

      コメントありがとうございます。
      経験談をコメントいただけると他の方の参考にもなるので助かります。
      どのような表示設定にしているかにもよるとは思いますが
      ちらつき防止策の1つですね。

  9. omoroya omoroya より:

    1桁を理解したら4桁に挑戦、ダイナミック点灯方式を理解しましょう!

タイトルとURLをコピーしました