2011年5月3日火曜日

ArduinoでLED制御

昨日のアレをArduinoで制御してみようと思い立った
理由は簡単
PICが思い通りに動いてくれなかった どこにバグがあるかわからない
ということでArduino
いちおう機械語のはずだし必要速度は出てくれるだろうと予想

んで



/*

pin2 = TC74HC4511AP A
pin3 = TC74HC4511AP B
pin4 = TC74HC4511AP C
pin5 = TC74HC4511AP D

pin8 = TC74HC238AP A
pin9 = TC74HC238AP B
pin10 = TC74HC238AP C

*/
boolean SEG[44];

void setup() {
int i = 2;
pinMode(i, OUTPUT); i++;
pinMode(i, OUTPUT); i++;
pinMode(i, OUTPUT); i++;
pinMode(i, OUTPUT); i = 8;
pinMode(i, OUTPUT); i++;
pinMode(i, OUTPUT); i++;
pinMode(i, OUTPUT); i = 0;
pinMode(13, OUTPUT);

SEG[i] = false; i++; SEG[i] = false; i++; SEG[i] = false; i++; SEG[i] = false; i++; // 0
SEG[i] = true; i++; SEG[i] = false; i++; SEG[i] = false; i++; SEG[i] = false; i++; // 1
SEG[i] = false; i++; SEG[i] = true; i++; SEG[i] = false; i++; SEG[i] = false; i++; // 2
SEG[i] = true; i++; SEG[i] = true; i++; SEG[i] = false; i++; SEG[i] = false; i++; // 3
SEG[i] = false; i++; SEG[i] = false; i++; SEG[i] = true; i++; SEG[i] = false; i++; // 4
SEG[i] = true; i++; SEG[i] = false; i++; SEG[i] = true; i++; SEG[i] = false; i++; // 5
SEG[i] = false; i++; SEG[i] = true; i++; SEG[i] = true; i++; SEG[i] = false; i++; // 6
SEG[i] = true; i++; SEG[i] = true; i++; SEG[i] = true; i++; SEG[i] = false; i++; // 7
SEG[i] = false; i++; SEG[i] = false; i++; SEG[i] = false; i++; SEG[i] = true; i++; // 8
SEG[i] = true; i++; SEG[i] = false; i++; SEG[i] = false; i++; SEG[i] = true; i++; // 9
SEG[i] = false; i++; SEG[i] = true; i++; SEG[i] = false; i++; SEG[i] = true; i++; // 10

digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
}

void loop() {
for (int i = 0; i <= 10; i++) {
SetSeg(i);
digitalWrite(13, false);
delay(250);
digitalWrite(13, true);
delay(250);
}
}

void SetSeg(char c) {
int i = (c * 4);
digitalWrite(2, SEG[(0 + i)]);
digitalWrite(3, SEG[(1 + i)]);
digitalWrite(4, SEG[(2 + i)]);
digitalWrite(5, SEG[(3 + i)]);
}


というところまでできた
ビットシフトとか使えばもっと簡単だけど
めんどくさいしあまり推奨されてないのでこのような感じ
boolean型で配列を作って
それを代入する
本来7セグメントデコーダとか使わないときに使う手法
Arduinoの場合ピン数が少ないから7セグLEDを使うことは少ないけど
あの奇っ怪な配置をやるのは意外と便利
もっといい方法もあると思うけど
基本的にC語なら何でも使えるから多用してる

あとなんでかHTMLにコピーというのができないんだよなぁ

0 件のコメント:

コメントを投稿