こんにちは、のすけです。
中華で始める Arduino入門日記の14回目になります。
この連載は、爆安の中華製のArduino互換機を入手し、色々と苦しみながらも安い互換機でArduinoを学習してしまおうというものです。 入手の話はこちらから。
今回のお題
前回は温度センサーを使いました。
今回は、7セグメントLEDを利用してみたいと思います。
チュートリアルのchapter12に対応しています。
早速始めましょう。
7セグメントLED
こいつです。
みてわかる通り数字を表示することができそうです。
サクッと表示させちゃいましょう。
回路
7か所すべての足とデジタルピンをつないで、HIGH,LOWを切り替えればいける感じっぽい。
電圧は下の真ん中の端子にGNDを220Ωの抵抗付きで接続します。
絵では3.3Vにつないでいるように見えますが、実際にはGNDに繋ぎましょう。
by SainSmartチュートリアル
コードがヒドいことになってます。
プログラム
例によってサンプルプログラムを使うと、まともに数字にならないので自作します。
わかりやすくA~GとDPを表示する変数を作って、それを利用する数字関数を作ります。
数時関数の中では、一度LEDの表示をすべてリセットするall_low
を呼び出すシンプルな構造にしました。
loop
内では数字を呼び出します。サンプルにはない9と0も追加してあります。
int a=7; int b=6; int c=5; int d=11; int e=10; int f=8; int g=9; int dp=4; // すべて消す void all_low(void) { unsigned char j; for(j=4;j<=11;j++) digitalWrite(j,LOW); } //display number 1 void digital_1(void) { all_low(); digitalWrite(c,HIGH); digitalWrite(b,HIGH); } //display number2 void digital_2(void) { all_low(); digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(g,HIGH); digitalWrite(e,HIGH); digitalWrite(d,HIGH); } // display number3 void digital_3(void) { all_low(); digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(g,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); } // display number4 void digital_4(void) { all_low(); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(b,HIGH); digitalWrite(c,HIGH); } // display number5 void digital_5(void) { all_low(); digitalWrite(a,HIGH); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); } // display number6 void digital_6(void) { all_low(); digitalWrite(a,HIGH); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(e,HIGH); } // display number7 void digital_7(void) { all_low(); digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(c,HIGH); } // display number8 void digital_8(void) { all_low(); digitalWrite(a,HIGH); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(e,HIGH); digitalWrite(b,HIGH); } // display number9 void digital_9(void) { all_low(); digitalWrite(a,HIGH); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(b,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); } // display number0 void digital_0(void) { all_low(); digitalWrite(a,HIGH); digitalWrite(f,HIGH); digitalWrite(e,HIGH); digitalWrite(d,HIGH); digitalWrite(c,HIGH); digitalWrite(b,HIGH); } void setup() { int i;//define i for(i=4;i<=11;i++) pinMode(i,OUTPUT);//set pin4~pin11 output } void loop() { while(1) { digital_1(); //1 delay(1000); digital_2(); delay(1000); digital_3(); delay(1000); digital_4(); delay(1000); digital_5(); delay(1000); digital_6(); delay(1000); digital_7(); delay(1000); digital_8(); delay(1000); digital_9(); delay(1000); digital_0(); delay(1000); } }
表示してみる
結果はこちら
なかなか綺麗に出ますね。
次は4桁の7セグメントLEDに接続します。