7セグメントLEDを使ってみる | 中華で始める Arduino入門日記14
こんにちは、のすけです。
中華で始める Arduino入門日記の14回目になります。
この連載は、爆安の中華製のArduino互換機を入手し、色々と苦しみながらも安い互換機でArduinoを学習してしまおうというものです。 入手の話はこちらから。
中華で始める Arduino入門日記1 はじめに「中華機を購入してみる」 - hollywis's diary (はりうすブログ)
今回のお題
前回は温度センサーを使いました。
温度センサーを使ってみる | 中華で始める Arduino入門日記13 - hollywis's diary (はりうすブログ)
今回は、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に接続します。
