hollywis's diary (はりうすブログ)

はりうすの活動日記です

7セグメントLEDを使ってみる | 中華で始める Arduino入門日記14

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

中華で始める 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に接続します。