記事一覧

Arduinoでシフトレジスタの実験

2013.03.02

アマゾンでArduinoを買いました。
久々の電子工作に挑戦!ということで、さっそくシフトレジスタ(74HC164)につないでナイトライダー風に光らせて遊んでみました。


ようつべカスタマイザ

こんな感じで配置(LEDの配線は一部省略)
ファイル 25-1.png

簡単ですが、ソースファイルも置いておきます。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を刺すだけで、エディタにコンパイラとマイコンへのアップローダが統合されていて相当便利です。ちょっとした回路の実験にはもってこいですね。

タグ:74HC164 Arduino LED ロジックIC