マカロニペンギンの健忘録

特にテーマを決めているわけじゃないが、私が気になったことを書いていく予定です。

ArduinoでたくさんのLEDを扱う

2010年11月28日 | 電子工作
先日の記事、「Silriumの60th Luminous Clockキット完成」のSilriumの60th Luminous Clockに触発されて、ArduinoでたくさんのLEDを扱うにはどうしたら良いのか考えました.
もっとも参考にさせていただいたのは当のSilriumの60th Luminous Clockの回路図です。

Arduinoには13コのデジタル出力ピンがあります。
それぞれに1つずつLEDを接続したとしても13コのLEDしか取り扱うことができません。
Silriumの60th Luminous ClockはマイコンチップにATMEGA32Aを使っていてArduinoのATMEGA328Pとほとんど同じだと思います。
そのATMEGA32Aで60+7×4+2=90ものLEDを操作しているのです。
(もしかしたら60+8×4+2=94かもしれない)

とりあえず60th Luminous Clockを目指すだけ目指してみようと始めて見ました。

まず最初は6ピンの出力を使って9つのLEDを操作してみます。

boolean ledStat[] = {true,false,true,false,false,false,false,true,false};
int ledTime = 10;
void setup() {
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(13, OUTPUT);
ledInit();
}

void loop()
{
for(int i=0 ; i
if(ledStat[i] == true){
ledInit();
digitalWrite(ledCol(i),HIGH);
digitalWrite(ledRow(i),LOW);
delay(ledTime);
}
}
}

void ledInit(){
digitalWrite(0,LOW);
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}

int ledCol(int a){
static int Col;
Col = a%3;
return Col;
}

int ledRow(int a){
static int Row;
Row = ((int)a/3)+3;
return Row;
}


これで理論的には13ピンで42コのLEDが扱えるはずです。