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

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

ArduinoでたくさんのLEDを扱う-高速版

2010年12月01日 | Weblog
前回の「AruduinoでたくさんのLEDを扱う」を改良版です。
ハードの変更はありません。
前回のプログラムから
なにもLED表示の変化が無いのはおもしろくないので乱数でLED表示が変わるようにした
毎回全部のLEDの初期化をやめ、縦横別々に初期化を行うようにした。
直接ポート操作を行い、すべてのPINをいっぺんに書き込みを行うようにした
を変更していきました。

あまりにも早くなってしまったので、乱数で変わっていく様子が分からないので一番外側のループで擬似Waitしています。
   
boolean ledStat[9];
int ledTime = 10000;
byte ledByte = B111000;
int col=2;
int row=2;
int r;
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);
PORTD = ledByte;
}

void loop()
{
r=random(0,9); //乱数発生
ledStat[r] = !ledStat[r];
for(int t=0 ; t<=ledTime ; ++t){ //Wait Time
for(int i=0 ; i<=row ; ++i){ //横列ループ
ledByte = B111000; //ledByte初期化
ledByte = ledByte - (1 << (i+3)); //横列セット
for (int j=0 ; j<=col ; ++j){ //縦列ループ
if (ledStat[i*3+j] == true){ //縦列セット
ledByte = ledByte + (1 << j);
}
PORTD = ledByte; //書き込み
}
}
}
}


最新の画像もっと見る

コメントを投稿