2018年6月12日火曜日

【Arduino】シフトレジスタでLEDを点灯させてみる

この前までで
何とか複数のI2Cデバイスが検出できそう
というところまで行ったのですが、
もうそろそろ問題になってきていることがあります。

それは、配線がもう管理しきれていないことです。
前回の配線は外したら元に戻せなくなりましたorz


Arduinoの出力ピンも数は限られているわけで、
前回のような状態で10本も20本も出力ピン設定ができるわけではないです。
そんなわけで、レジスタの導入を試みてみました。




今回のはシフトレジスタですね。
これを使うことで少ない出力ピンで多くの出力パターンを扱うことが出来ます。
良く上がっているのはLEDをたくさん光らせるヤツですね。
それをやってみようと思います。

シフトレジスタはVSSとGND以外に
Latchピン、Clockピン、Dataピンが入力データとして使われるようですね。
んで、7~8ピンの出力を行うことが出来る…と。
端っこの端子を次のシフトレジスタに付けるとその上位ビットとかも扱えるそうです。

データを送る間はLatchピンをLOWにする。
データを送り終わった後はLatchピンをHIGHにする。
ってのを気を付ければ出来そうな感じですね?
(よくわかっていない)


配線はこんな感じ
シフトレジスタの周辺がもはや確認不可能な状態になってますが、
VSS,GND以外は
Latchピン、Clockピン、Dataピンの3つのピンで
LEDを7つ点灯できてます。

端っこを他のシフトレジスタにつなぐともっと長くLEDを繋げられる…?
これは今後の実験課題ですね!
















コードはこちら

const int latchPin = 11;  // 74HC595のST_CPへ
const int clockPin = 10;  // 74HC595のSH_CPへ
const int dataPin  = 12;  // 74HC595のDSへ

void setup()
{
  pinMode( latchPin, OUTPUT );
  pinMode( clockPin, OUTPUT );
  pinMode( dataPin,  OUTPUT )
;
}

void loop()
{
  // LED1からLED8までを順に光らせます
  for ( int j = 0; j < 7; j++ )
  {
    // 送信中のlatchPinはグランド(LOW)レベル
    digitalWrite ( latchPin, LOW );
    // シフト演算を使って点灯するLEDを選択しています
    shiftOut( dataPin, clockPin, LSBFIRST, 1<<j );
    // 送信終了後latchPinをHIGHにする
    digitalWrite( latchPin, HIGH );
    delay( 50 );
  }
}


LEDを点灯させたヤツは静止画だとわからないのでYoutubeに動画をアップ
せっかくアカウント持ってるからね。

https://youtu.be/y65j2fbwBBQ


動画の画質のせいか
この点灯間隔でもすごくちらついて見えますね。
直に見ていても結構明るくてチカチカするんですが。

このちらつき現象を利用したPOVなるものがあるらしいのですが、これはまた後で。
バーサライトともいうらしく、残像を使った視覚演出らしいです。

あと、LEDに抵抗をかませていないので長く点灯させると多分バァン!します。
本当は抵抗かませないといけないんですけどねー。
すまない…。





0 件のコメント:

コメントを投稿