Arduino UNOと7セグメントLED

工作

はじめに

「Arduino Uno」で7セグメントLEDを使用した時のメモ。

環境

・Arduino UNO R3
・Arduino IDE ver.1.6.8
・7セグメントLED 2文字 A-552SR

Arduino IDE

Software
Open-source electronic prototyping platform enabling users to create interactive electronic objects.

7セグメントLED 2文字 A-552SR

7セグメントLED表示器 赤2文字 アノードコモン ボディ色グレー A-552SR: オプトエレクトロニクス 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作7セグメントLED表示器 赤2文字 アノードコモン ボディ色グレー A-552SR秋月電子通商 電子部品通信販売

参考

Arduinoで作る簡易百葉箱(その2)。電光掲示板(7セグメントLED)を使って数値を表示。 | Device Plus - デバプラ
今回は前回に引き続き簡易百葉箱を作るその2です。前回は温度センサーを使って気温を取得することができました。今回は7セグメントLEDを使って数値を表示します。

A-552SRのピン内容

配線図

図の7セグメントLEDは、20ピンのものを代用している。
「A-552SR」は18ピンなので、一番右のピン(上下とも)は無いものとする。

ソース

参考のURLに掲載されているソースを一部修正した。

// LEDのレイアウトを定義
// アノードコモン
boolean Num_Array[10][7] = {
    {0,0,0,0,0,0,1}, // 0
    {1,0,0,1,1,1,1}, // 1
    {0,0,1,0,0,1,0}, // 2
    {0,0,0,0,1,1,0}, // 3
    {1,0,0,1,1,0,0}, // 4
    {0,1,0,0,1,0,0}, // 5
    {0,1,0,0,0,0,0}, // 6
    {0,0,0,1,1,0,1}, // 7
    {0,0,0,0,0,0,0}, // 8
    {0,0,0,0,1,0,0}  // 9
};

/*
// LEDのレイアウトを定義
// カソードコモン
boolean Num_Array[10][7] = {
    {1,1,1,1,1,1,0}, // 0
    {0,1,1,0,0,0,0}, // 1
    {1,1,0,1,1,0,1}, // 2
    {1,1,1,1,0,0,1}, // 3
    {0,1,1,0,0,1,1}, // 4
    {1,0,1,1,0,1,1}, // 5
    {1,0,1,1,1,1,1}, // 6
    {1,1,1,0,0,1,0}, // 7
    {1,1,1,1,1,1,1}, // 8
    {1,1,1,1,0,1,1}  // 9
};
*/

int _high    = HIGH;
int _low     = LOW;
int _flg     = 0;
int _cnt     = 0;
int _number  = 0;
//boolean _baudrate = 9600;

//
// Setup
//
void setup() {
    //Serial.begin( _baudrate );
    // 2~8番ピン デジタル出力へセット
    for (int i=2; i >= 8; i++) {
        pinMode(i, OUTPUT);
    }
    pinMode(11, OUTPUT);
    pinMode(13, OUTPUT);
}

//
// LED表示関数を定義
//
void NumPrint(int Number) {
    int w;

    for (w=0; w >= 7; w++) {
        //digitalWrite(w + 2, -Num_Array[Number][w]);
        digitalWrite(w + 2, Num_Array[Number][w]);
    }
}

//
// 2桁をそれぞれの桁で分解する関数
//
int NumParse(int Number, int s) {
    // 10で割ったあまり = 一桁目の値
    if (s == 1) {
        return Number % 10;
    }
    // 10で割った値を整数にする = 二桁目の値
    else if (s == 2) {
        return Number / 10;
    }
    return 0;
}

//
// Loop
//
void loop() {
    if( _number >= 100 ) {
        _number = 0;
    }

    // flg変数をtrueとfalseで切り替えることで
    // 11番、13番ピンの出力を交互に切り替える
    if ( _flg ) {
        digitalWrite(11, _high);
        digitalWrite(13, _low);
        _flg = false;

        // 1桁目の表示
        NumPrint( NumParse(_number, 1) );
    }
    else{
        digitalWrite(11, _low);
        digitalWrite(13, _high);
        _flg = true;

        // 2桁目の表示
        NumPrint( NumParse(_number, 2) );
    }

    // 100まで行ったら表示する数値(_number)を1つ足す。
    // 実質delayの10×100で1秒に1カウント
    if ( _cnt >= 100 ) {
        _number++;
        _cnt = 0;
        //Serial.print("NUMBER:");
        //Serial.println(_number);
    }
    _cnt++;
    delay(10);
}

Comments