【電子工作】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セグを3の表示をしている状態で、D1のみを表示させると、
1桁の7セグを2の表示をしている状態で、D2のみを表示させると、
1桁の7セグを1の表示をしている状態で、D3のみを表示させると、
1桁の7セグを0の表示をしている状態で、D4のみを表示させると、
簡単ですね!
さて、4桁同時表示するには・・・・
1桁の7セグを3の表示をしている状態で、
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でした。











