今回は、1桁の7セグLEDを2つ使って2桁のカウントアップをしてみたいと思います。ArduinoはArduino UNOを使ってやります。1桁の7セグLEDは、GND含めて9本つなげる必要があります。じゃあ、1桁の7セグLEDを2個使ったら他にセンサーつけたいときにできないじゃんって感じですよね!私も最初はそう思っていました!しかし、同じく9本つなげて可能にできます。それではやっていきましょう!
使用するもの
使用するものは下記のリストの物です。購入先は秋月電子通商とAmazonです。同じもの購入したい方はリストのリンクより購入してください。
- Arduino Uno Rev3
- USBケーブル USB2.0 AオスーBオス 1.5m AーB
- 7セグメント
- カーボン抵抗(炭素被膜抵抗) 1/2W200Ω
- ブレッドボード・ジャンパーワイヤー (オス―メス) セット
- ブレッドボード
7セグメントの仕組み
7セグメントの仕組みについては以前に載せた「Arduinoで7セグLEDを使ってみた!」に記載しています。詳しくは、そちらよりご確認ください。
1桁7セグLEDを使って2桁表示
構成
今回行うやり方は、7セグメントにあるGNDをArduinoのデジタルピンに接続し、2桁目のみArduinoのGND、1桁目のみArduinoのGNDに接続する状態を高速で切り替えることで実際には、2桁目が表示されている際は1桁目が消えていますが、高速で切り替わっているため人間の目では2桁目、1桁目の両方が点灯しているように見えます。この状態を作ります。
先程、「2桁目のみArduinoのGND、1桁目のみArduinoのGNDに接続する状態を高速で切り替える」と述べましたが、どうやって??って感じですよね!ArduinoのデジタルピンをOUTPUTに設定すると「digitalWrite」で「HIGH」「LOW」を切り替えることができます。「HIGH」では、デジタルピンから5V出力されますが、「LOW」では0Vの状態となります。つまり、「LOW」とすることでGNDの状態を作ることができます。つまり、2桁目の7セグメントのGNDに接続されたデジタルピンを「LOW」、1桁目の7セグメントのGNDに接続されたデジタルピンを「HIGH」とすると2桁目のみ点灯できます。これを高速で切り替えを行います。
ここで、7セグメントのGNDに5V入れて大丈夫??と思う方もいると思います。7セグメントもLEDと同じため極性があり、逆に電圧を加えると点灯しません。また、壊れたりしないのかと思う方もいると思います。データシート等に「逆電圧」という欄があるのでそこの項目に書かれた電圧までなら逆電圧にも耐えられるため心配はいりません。ですが、それ以上の電圧では壊れるので注意してください。LEDの場合は5Vまで耐えられるものが多いので大抵大丈夫です。
回路
回路は以下のように作成します。配線が複雑ですが間違えないように注意してください。使用しているピンはD2~D8、D12~D13です。抵抗は、200Ωです。

プログラム
プログラムは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | int seg_left = 13; //2桁目のGND int seg_right = 12; //1桁目のGND int counter = 0; int num = 0; //表示する数字 boolean sig = false; boolean Num_Array[10][7]={ {1,1,1,1,1,1,0}, {0,1,1,0,0,0,0}, {1,1,0,1,1,0,1}, {1,1,1,1,0,0,1}, {0,1,1,0,0,1,1}, {1,0,1,1,0,1,1}, {1,0,1,1,1,1,1}, {1,1,1,0,0,1,0}, {1,1,1,1,1,1,1}, {1,1,1,1,0,1,1} }; void setup(){ Serial.begin(9600); for (int i=2; i<=8; i++){ pinMode(i,OUTPUT); } pinMode(seg_left,OUTPUT); pinMode(seg_right,OUTPUT); } //数字の表示 void LightNumber(int number){ for (int t = 0; t <= 6; t++){ digitalWrite(t + 2, Num_Array[number][t]); } } //表示する数字の分解と桁の指定 int NumSwitching(int number,int s){ int LightNum; switch(s){ case 1: LightNum = number % 10; break; case 2: LightNum = number / 10; } return LightNum; } void loop(){ //100でリセット if(num >= 100){ num = 0; } if(sig){ digitalWrite(seg_right,LOW); digitalWrite(seg_left,HIGH); sig = false; LightNumber(NumSwitching(num,1)); //1桁目の表示 } else{ digitalWrite(seg_right,HIGH); digitalWrite(seg_left,LOW); sig = true; LightNumber(NumSwitching(num,2)); //2桁目の表示 } if(counter >= 100){ num++; counter = 0; } counter++; delay(10); } |
プログラムについて説明します。boolean Num_Array[10][7]は、10通りの点灯方法があり、点灯させることができるLEDは合計で8個ありますが、今回は7個の要素を持った配列を10個宣言しています。7個の配列の要素は使用するデジタルピンの番号である{2,3,4,5,6,7,8}です。1はHIGHでその端子を点灯させ、0はLOWでその端子を消灯です。今回のプログラムでは、左から順に0,1,2,3,4,5,6,7,8,9と点灯するように配列を宣言しています。各数字の表示方法は下記の表を参考にしてください。


setup文では、使用するデジタルピンをfor文を用いてOUTPUTに設定しています。D2~D8までのデジタルピンを使用するので、for文は、iの値が8以下になるまで繰り返すという意味です。また、iの初期値は2で、繰り返されるたびに+1しています。2桁目と1桁目のGNDと接続しているseg_left(D13)とseg_right(D12)もOUTPUTに設定しています。
void LightNumber(int number)という独自関数の中身について説明します。この関数は、指定した数字(0~9)を表示します。digitalWriteの「t+2」は、tに0から繰り返すたびに「+1」ずつ加算されD2~D9までの端子のHIGHかLOWを設定します。Num_Array[number][t]の「number」は表示したい数字が入ります。この配列は0~9の順に表示できるようにしているので、指定すれば指定した数字を表示させるための8個の要素の入った配列が指定されます。「t」には先ほど述べたように0~7に順に値が入ります。8個の要素を指定するために代入していますが、なぜ0からと思う方もいると思います。配列は、0、1、2、3……と数えるので0から代入します。
int NumSwitching(int number,int s)という独自関数の中身について説明します。指定した数字の指定した桁の数字を表示します。つまり、第1引数であるnumberに「63」を代入し、第2引数であるsに「1」を入れると関数内のswitch文によりcase1が実行され、1桁目の「3」をLightNumに代入します。ここでの計算は、「number % 10」=「63 % 10」で「63/10」をした際のあまりを求めます。つまり、「3」となります。逆に、case2では、割ったときのあまりではない方を求めます。このようにして、1桁目と2桁目を算出しています。「return LightNum」では、指定した桁の数字が戻り値となるようにしています。
loop文では、ifとelseが繰り返す際に交互に実行できるようにしています。理由は、2桁目と1桁目の7セグのGNDに接続されたデジタルピンを交互にGNDにしたいからです。1桁目を表示する際は、「seg_right」(D12)を「LOW」、「seg_left」(D13)を「HIGH」、とします。2桁目を表示する際は、「seg_right」(D12)を「HIGH」、「seg_left」(D13)を「LOW」、とします。これを10ミリ秒おきに繰り返します。ここの、delay()の指定時間を30などにしてみると切り替えている様子を見ることができます。また、今回は10ミリ秒おきに繰り返しているため100回繰り返す度に表示する数値に1足しています。つまり、1秒に1つカウントアップしています。表示する数字(num)が100となるとリセットし再開します。
動画
参考の動作動画です!
見たついでに「いいね」してくれたら喜んじゃいます!
参考サイト
今回の内容は、以下のサイトを参考とさせて頂き、記事を書きました。
最後に
説明した文章の中でわからない言葉があった際は、問い合わせ又はSNSでの連絡してください。
今回の記事を読んで気になった方は下記よりSNSのフォローをよろしくお願いいたします。また、YouTubeにも様々な動画を載せているのでご覧ください!

鳩ラボ

最新記事 by 鳩ラボ (全て見る)
- 1桁7セグLEDを使って2桁表示してみよう ~Arduino~ - 09/13/2020
- ラズパイをリモートで操作!! 〜VNC接続をしてみよう〜 - 08/30/2020
- ミニバイクでサーキットを走る!!(マシン準備編) - 07/08/2020
- ラズパイOSについて - 07/06/2020
- LINE Botを作った話【GAS×LINEMessagingAPI】 - 07/05/2020
コメント