こんにちは、のすけです。

中華で始める Arduino入門日記の14回目になります。

この連載は、爆安の中華製のArduino互換機を入手し、色々と苦しみながらも安い互換機でArduinoを学習してしまおうというものです。 入手の話はこちらから。

hollywis.hatenablog.com

今回のお題

前回は温度センサーを使いました。

hollywis.hatenablog.com

今回は、7セグメントLEDを利用してみたいと思います。

チュートリアルのchapter12に対応しています。

早速始めましょう。

7セグメントLED

こいつです。

f:id:hollywis:20151211152522j:plain

みてわかる通り数字を表示することができそうです。

f:id:hollywis:20151211155027j:plain

サクッと表示させちゃいましょう。

回路

7か所すべての足とデジタルピンをつないで、HIGH,LOWを切り替えればいける感じっぽい。

電圧は下の真ん中の端子にGNDを220Ωの抵抗付きで接続します。

絵では3.3Vにつないでいるように見えますが、実際にはGNDに繋ぎましょう。

f:id:hollywis:20151211152428p:plain
by SainSmartチュートリアル

コードがヒドいことになってます。

f:id:hollywis:20151211153413j:plain

プログラム

例によってサンプルプログラムを使うと、まともに数字にならないので自作します。

わかりやすく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に接続します。

Receive the latest news in your email
Table of content
Related articles