aitendoで4桁7セグがなんと30円で売っていたので、勢いでポチってしまった。
買ってから使い方をググってみると、意外とめんどくさい。特に今回買ったのがアノードコモンだったので、Arduinoで使う場合DOの電流が足りないらしい。
そこで、秋月でトランジスタアレイを購入してなんとか使ってみる。
前回のLCDを使ったデジタル時計を、7セグでトライ。
材料
Arduino pro mini 5V
4桁7セグ
トランジスタアレイ:TD62783APG
抵抗330Ω:8個
リアルタイムクロック(RTC):DS3231
回路
アノード側をHIGH、カソード側をLOWにすることで各LEDが点灯する。
アノードコモンの7セグの場合は、どのカソードをLOWにするかで何の数字を表示するかを選択し、どのアノードをHIGHにするかでどの桁の数字を点灯させるかを選択する。4桁違う数字を表示するにはHIGHにするアノードを高速で切り替えることで残像を利用して4桁表示しているように見せるらしい。制御するArduinoからみたら結構忙しいね。
CakeBoardを使って抵抗を裏側に配置することで、少しはすっきりしたかな。

ソースコード
リアルタイムクロックの分と秒を表示する時計にしてみた。
//デジタル時計:7セグ
#include "RTC_DS3231.h"
#include <Wire.h>
#define RTC_addr 0x68
RTC_DS3231 rtc(RTC_addr);
#define ASCII_ZERO 48;
int pin_A[4] = {4,2,3,5}; //アノード 桁選択
int pin_n[7] = {6,7,8,9,10,12,13}; //カソード 数値選択
int pin_k = 11; //: 2桁目のみ
byte num_def[11] = {B10001000, // 0 (各bit: 0_ON, 1_OFF)
B11101101, // 1
B10010100, // 2
B10100100, // 3
B11100001, // 4
B10100010, // 5
B10000010, // 6
B11101100, // 7
B10000000, // 8
B10100000, // 9
B11111111}; // OFF
void setup(void) {
Wire.begin();
//各ピンの初期化
for(int i=2; i<=5; i++){
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}
for(int i=6; i<=13; i++){
pinMode(i,OUTPUT);
digitalWrite(i,HIGH);
}
}
void loop(void) {
rtc.getTime();
seg_clock();
}
void seg_clock(void){
//7セグに時刻を出力
int buf[4] = {0,0,0,0};
char *time = rtc.acTime;
buf[0] = time[3] - ASCII_ZERO; //分 10位
buf[1] = time[4] - ASCII_ZERO; //分 1位
buf[2] = time[6] - ASCII_ZERO; //秒 10位
buf[3] = time[7] - ASCII_ZERO; //秒 1位
//4桁表示
for (int i=0; i<=3; i++){
digitalWrite(pin_A[i],HIGH);
for (int j=0; j<7; j++ ){
digitalWrite(pin_n[j],bitRead(num_def[buf[i]],j));
}
digitalWrite(pin_k,LOW); //:を表示
delay(5);
digitalWrite(pin_A[i],LOW);
}
}






