2013.03.02
アマゾンでArduinoを買いました。
久々の電子工作に挑戦!ということで、さっそくシフトレジスタ(74HC164)につないでナイトライダー風に光らせて遊んでみました。
ようつべカスタマイザ
こんな感じで配置(LEDの配線は一部省略)
簡単ですが、ソースファイルも置いておきます。AR_NightSample.zip
少しだけソース解説
LED全消灯関数
void ledClear() {
digitalWrite(aPin,HIGH);
for(int i = 0; i < 9; i++){
digitalWrite(clkPin,LOW);
delayMicroseconds(1);
digitalWrite(clkPin,HIGH);
delayMicroseconds(1);
}
}
シフトレジスタをクリアするために、clk(クロックピン)の上げ下げを行っています。
LEDパターン表示関数
void ledDigit(int d) {
ledClear();
for (int i = 0; i < 9; i++) {
digitalWrite(clkPin, HIGH);
digitalWrite(aPin, ~d & (1 << i));
delayMicroseconds(1);
digitalWrite(clkPin, LOW);
delayMicroseconds(1);
}
delay(INTERVAL);
}
ledDigitには表示したいパターンを数値で渡します。
例えば、
●●●●●●●
であれば、2進数に直した「10101010」の数値(10進でも2進でも)を関数に渡します。
関数内では、1を1ビットずつ左シフトしてAND(&)を取った値によりLEDの表示判定を行っています。
digitalWrite()に渡す値、HIGH/LOWは数値の1/0で代用できるようなので結果をそのまま渡します。
digitalWrite(aPin, ~d & (1 << i));
(今回はLEDをアノードコモンにし、164のピンがLOWになったときに表示するようにしているので、さらにNOT(~)により結果を反転しています)
ましたが、ArduinoはUSBを刺すだけで、エディタにコンパイラとマイコンへのアップローダが統合されていて相当便利です。ちょっとした回路の実験にはもってこいですね。