はじめに
「Arduino Uno」で7セグメントLEDを使用した時のメモ。
環境
・Arduino UNO R3
・Arduino IDE ver.1.6.8
・7セグメントLED 2文字 A-552SR
Arduino IDE
https://www.arduino.cc/en/main/software
7セグメントLED 2文字 A-552SR
403- 現在メンテナンス中です。
参考

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