指定したピンに接続されたパラレルの状態を自動で順番に読み込み状態を1バイトの状態で取得するための関数。
74HC165などのLSIからのデータを読む場合などに利用するようですが、タイミングによってはうまく取れないような記事もあります。
記事抜粋
- SH/LDをLowにして入力を受け付ける
A-Hを入力しながら、SH/LDをHighにして入力を確定する - QHの値を読み取る (H入力の値を読み取る)
- CLKをHighにしてQHの値をずらす
QHの値を読み取る (H以外の入力の値を読み取る)
CLKをLowにもどす - 3の動作を7回繰り替えす
のうちの3.の動作を8回行うためで、CLKをあげてしまってからデータを読むためにH入力の情報が捨てられてしまうためです。
そのため対策として、ShiftIn()
を走らせる前にHのデータを読み取らないといけなく、また74HC165をデイジーチェインしている場合はズレたビットは2番目以降の74HC165からのデータを受けることになるのでさらなる対策が必要になってきます。
ついでにSPI接続を使って処理した場合もこのズレは起きます。
内容を入力してください。
※本関数は未検証です。
※翻訳と関連した様々な記事から情報を整理しました。
書き方 | readData=shiftIn(dataPin,clockPin,bitOrder) |
戻り値 | (byte)readData….読み取ったデータ |
引数 | (int)dataPin … 読み取りたいデータピン番号 (int)clockPin … クロック出力のピン番号。クロックをHIGHにした後、ビットを読み取り、その後クロックピンをLOWにする。 (int)bitOrder … 上位から(MSBFIRST)読むか下位から(LSBFIRST)読むかを指定する |
※たち上がりクロックのデバイスを利用するときは、shiftIn()を呼ぶ前にクロックピンをdigitalWriteでLOWにしておく。