注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!

7セグメントディスプレイ

概要

7セグメントディスプレイは、数字や文字を表示できる装置です。7つのLEDが並列に接続されて構成されています。ディスプレイ上のピンを電源に接続し、関連するピンを有効にすることで、対応するLEDセグメントが点灯し、異なる文字/数字を表示できます。このレッスンでは、特定の文字を表示する方法を学びます。

必要なコンポーネント

このプロジェクトには以下のコンポーネントが必要です。

全セットを購入するのが便利です。こちらがリンクです:

名称

このキットのアイテム数

リンク

Elite Explorer Kit

300+

Elite Explorer Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

Arduino Uno R4 WiFi

-

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

7セグメントディスプレイ

購入

配線図

../_images/13-7_segment_display_bb.png

回路図

この実験では、7セグメントディスプレイのa-gの各ピンをそれぞれ1000オームの電流制限抵抗に接続し、その後4-11ピンに接続します。GNDはGNDに接続します。プログラミングにより、4-11ピンの一つまたは複数をHighレベルに設定して、対応するLED(複数可)を点灯させます。

../_images/13-7_segment_display_schematic.png

コード

注釈

  • ファイル 13-7_segment.inoelite-explorer-kit-main\basic_project\13-7_segment のパスで直接開くことができます。

  • または、このコードをArduino IDEにコピーしてください。

13-7_segment.ino
  1/*
  2  The code is designed to control a 7-segment display using an Arduino. 
  3  It sequentially displays numbers 1-9 and letters A-F on the 7-segment 
  4  display, with each symbol displayed for one second.
  5
  6  Board: Arduino Uno R4 
  7  Component: 7-segment Display
  8*/
  9
 10// Define pins for each segment of the 7-segment display
 11const int a = 7;
 12const int b = 6;
 13const int c = 5;
 14const int d = 11;
 15const int e = 10;
 16const int f = 8;
 17const int g = 9;
 18const int dp = 4;  // Decimal point
 19
 20void setup() {
 21  // Set pins 4 to 11 as output
 22  for (int thisPin = 4; thisPin <= 11; thisPin++) {
 23    pinMode(thisPin, OUTPUT);
 24  }
 25  // Initialize display by turning off all segments
 26  turnOffAllSegments();
 27}
 28
 29void loop() {
 30  // Display numbers 1 to 9 and letters A to F sequentially
 31  digital_1(); delay(1000);
 32  digital_2(); delay(1000);
 33  digital_3(); delay(1000);
 34  digital_4(); delay(1000);
 35  digital_5(); delay(1000);
 36  digital_6(); delay(1000);
 37  digital_7(); delay(1000);
 38  digital_8(); delay(1000);
 39  digital_9(); delay(1000);
 40  digital_A(); delay(1000);
 41  digital_b(); delay(1000);
 42  digital_C(); delay(1000);
 43  digital_d(); delay(1000);
 44  digital_E(); delay(1000);
 45  digital_F(); delay(1000);
 46}
 47
 48void digital_1()  //display 1 to the 7-segment
 49{
 50  turnOffAllSegments();
 51  digitalWrite(b, HIGH);
 52  digitalWrite(c, HIGH);
 53}
 54
 55void digital_2()  //display 2 to the 7-segment
 56{
 57  turnOffAllSegments();
 58  digitalWrite(a, HIGH);
 59  digitalWrite(b, HIGH);
 60  digitalWrite(g, HIGH);
 61  digitalWrite(e, HIGH);
 62  digitalWrite(d, HIGH);
 63}
 64
 65void digital_3()  //display 3 to the 7-segment
 66{
 67  turnOffAllSegments();
 68  digitalWrite(a, HIGH);
 69  digitalWrite(b, HIGH);
 70  digitalWrite(c, HIGH);
 71  digitalWrite(d, HIGH);
 72  digitalWrite(g, HIGH);
 73}
 74void digital_4()  //display 4 to the 7-segment
 75{
 76  turnOffAllSegments();
 77  digitalWrite(b, HIGH);
 78  digitalWrite(c, HIGH);
 79  digitalWrite(f, HIGH);
 80  digitalWrite(g, HIGH);
 81}
 82
 83void digital_5()  //display 5 to the 7-segment
 84{
 85  turnOffAllSegments();
 86  digitalWrite(a, HIGH);
 87  digitalWrite(f, HIGH);
 88  digitalWrite(g, HIGH);
 89  digitalWrite(c, HIGH);
 90  digitalWrite(d, HIGH);
 91}
 92
 93void digital_6()  //display 6 to the 7-segment
 94{
 95  turnOffAllSegments();
 96  digitalWrite(a, HIGH);
 97  digitalWrite(f, HIGH);
 98  digitalWrite(e, HIGH);
 99  digitalWrite(d, HIGH);
100  digitalWrite(c, HIGH);
101  digitalWrite(g, HIGH);
102}
103
104void digital_7()  //display 7 to the 7-segment
105{
106  turnOffAllSegments();
107  digitalWrite(a, HIGH);
108  digitalWrite(b, HIGH);
109  digitalWrite(c, HIGH);
110}
111
112void digital_8()  //display 8 to the 7-segment
113{
114  turnOffAllSegments();
115  digitalWrite(a, HIGH);
116  digitalWrite(b, HIGH);
117  digitalWrite(c, HIGH);
118  digitalWrite(d, HIGH);
119  digitalWrite(e, HIGH);
120  digitalWrite(f, HIGH);
121  digitalWrite(g, HIGH);
122}
123
124void digital_9()  //display 9 to the 7-segment
125{
126  turnOffAllSegments();
127  digitalWrite(a, HIGH);
128  digitalWrite(b, HIGH);
129  digitalWrite(c, HIGH);
130  digitalWrite(d, HIGH);
131  digitalWrite(f, HIGH);
132  digitalWrite(g, HIGH);
133}
134
135void digital_A()  //display A to the 7-segment
136{
137  turnOffAllSegments();
138  digitalWrite(a, HIGH);
139  digitalWrite(b, HIGH);
140  digitalWrite(c, HIGH);
141  digitalWrite(e, HIGH);
142  digitalWrite(f, HIGH);
143  digitalWrite(g, HIGH);
144}
145
146void digital_b()  //display b to the 7-segment
147{
148  turnOffAllSegments();
149  digitalWrite(c, HIGH);
150  digitalWrite(d, HIGH);
151  digitalWrite(e, HIGH);
152  digitalWrite(f, HIGH);
153  digitalWrite(g, HIGH);
154}
155
156void digital_C()  //display C to the 7-segment
157{
158  turnOffAllSegments();
159  digitalWrite(a, HIGH);
160  digitalWrite(f, HIGH);
161  digitalWrite(e, HIGH);
162  digitalWrite(d, HIGH);
163}
164
165void digital_d()  //display d to the 7-segment
166{
167  turnOffAllSegments();
168  digitalWrite(b, HIGH);
169  digitalWrite(c, HIGH);
170  digitalWrite(d, HIGH);
171  digitalWrite(e, HIGH);
172  digitalWrite(g, HIGH);
173}
174
175void digital_E()  //display E to the 7-segment
176{
177  turnOffAllSegments();
178  digitalWrite(a, HIGH);
179  digitalWrite(d, HIGH);
180  digitalWrite(e, HIGH);
181  digitalWrite(f, HIGH);
182  digitalWrite(g, HIGH);
183}
184
185void digital_F()  //display F to the 7-segment
186{
187  turnOffAllSegments();
188  digitalWrite(a, HIGH);
189  digitalWrite(e, HIGH);
190  digitalWrite(f, HIGH);
191  digitalWrite(g, HIGH);
192}
193
194void turnOffAllSegments() {
195  // Turn off all segments of the 7-segment display
196  for (int thisPin = 4; thisPin <= 11; thisPin++) {
197    digitalWrite(thisPin, LOW);
198  }
199}


コード解析

この実験のコードは少し長いかもしれませんが、構文はシンプルです。見てみましょう。

loop()内で関数を呼び出す

digital_1(); //diaplay 1 to the 7-segment

delay(1000); //wait for a second

digital_2(); //diaplay 2 to the 7-segment

delay(1000); //wait for a second

digital_3(); //diaplay 3 to the 7-segment

delay(1000); //wait for a second

digital_4(); //diaplay 4 to the 7-segment

これらの関数をloop()に呼び出すことで、7セグメントが0-Fを表示します。以下に関数の例を示します。 digital_2() を例にとります:

digital_2()の詳細な分析

void digital_2()  //diaplay 2 to the 7-segment
{
  turnOffAllSegments();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(d, HIGH);
}
../_images/13_7segment.jpeg

まず、7セグメントディスプレイで数字の 2 がどのように表示されるかを理解する必要があります。これは、a、b、d、e、gのセグメントに電力を供給することで実現されます。プログラミングでは、これらのセグメントに接続されたピンをHighレベルに設定し、cとfはLowレベルに設定します。まず、 turnOffAllSegments() 関数を使用してすべてのセグメントを消灯し、その後必要なセグメントを点灯させます。

この部分を実行すると、7セグメントは 2 を表示します。他の文字の表示も同様です。表示上、大文字の BD は、それぞれ 80 と同じに見えるため、小文字で表示されます。