ダイナミック点灯に挑戦。うまくいった。
ArduinoのDIGIATLのPin0からPin7がPORTDに対応します。NPNトランジスタ経由でアノードコモンの7セグLEDに接続。
DIGITALのPin8から13がPORTBですが、8,9,10,11を使って表示する桁を選択します。こちらはハイサイドスイッチなのでPNPトランジスタ経由で駆動します。
何も考えずに適当に回路つくったらトランジスタ12個、抵抗20本という回路になりましたが、マイコンのポートはLEDくらいなら直接駆動できるようなので、トランジスタは不要で、抵抗8本のみでよかったのかもしれません。
あと、高い桁の部分の0表示、消灯するような場合分けをしたら成功でしょうか。
以下コード
unsigned char SevenSeg[] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111}; // an array for 7 segment LED display
unsigned char SevenSegDigits[] = {0b00001110, 0b00001101, 0b00001011, 0b00000111}; //define digits
void setup() {
DDRD=0b11111111; //setting PORTD0-7 for output
DDRB=0b00001111; //setting PORTB0-3 for output
}
void loop() {
unsigned int Value;
unsigned char DigitVal[3];
for(int i=0;i<10000;i++){ //表示する値
Value=i;
for(char ii=0;ii<4;ii++){ //各桁に分ける
DigitVal[ii]=Value%10;
Value=Value/10;
}
for(char k=0;k<2;k++){ //表示ループ
for(char j =0;j<4;j++){
PORTB=SevenSegDigits[j];
PORTD=SevenSeg[DigitVal[j]];
delay(1); //表示の停止待ち時間
}
}
}
}