■shiftOut関数
shiftOut関数は、一度に1ビットのデータを1ビットシフトします。
最大(最左端)または最小(最右端)のいずれかの有効ビットから開始します。
各ビットはデータピンに順番に書き込まれ、その後、クロックピンがパルスが与えられて(ハイになってからローになる)、ビットが使用可能であることが示されます。
■使用例
ArduinoIDEで使用するshiftOut関数の使い方は以下の通りです。
試しにこのプログラムをArduinoUNOで実行すると、8ビットシフトレジスタ(74HC595)のラッチ、クロック、データピンに接続されたにArduinoUNOの8,11,12ピンからshiftOut関数によって信号が送信され、そのデータは0~256へとカウントアップして行きます。
//**************************************************************// // Name : shiftOutCode, Hello World // // Author : Carlyn Maw,Tom Igoe // // Date : 25 Oct, 2006 // // Version : 1.0 // // Notes : 74HC595シフトレジスタを使用するためのコード // // : 0から255までカウント // //**************************************************************** //74HC595のST_CPに接続されたピン int latchPin = 8; //74HC595のSH_CPに接続されたピン int clockPin = 12; //74HC595のDSに接続されたピン int dataPin = 11; void setup() { //メインループ内でアドレス指定されているため、ピンを出力に設定する pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { //カウントアップルーチン for (int j = 0; j < 256; j++) { //送信している間は、ラッチピンをグランドに短絡してください digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, j); //ラッチピンをハイに戻してチップに信号を送ります digitalWrite(latchPin, HIGH); delay(1000); } }
■構文
shiftOut(dataPin、clockPin、bitOrder、value)
■パラメータ
dataPin:各ビットを出力するピン(int)
clockPin:dataPinが正しい値に設定されるとトグルするピン(int)
bitOrder:ビットをシフトアウトする順序。
MSBFIRSTまたはLSBFIRSTのいずれかです。
※Most Significant Bit First、またはMost Significant Bit First
value:シフトアウトするデータ。(byte)
■戻り値
有りません
■補足
①dataPinとclockPinは、すでにpinMode関数の呼び出しによって出力として設定されている必要があります。
②shiftOut関数は現在1バイト(8ビット)を出力するように書き込まれているので、255より大きい値を出力するには2ステップの操作が必要です。
int data = 500;
// 高いバイトからシフトアウト
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
// 低いバイトからシフトアウト
shiftOut(dataPin, clock, MSBFIRST, data);
// LSBFIRSTシリアルでこれを行う
data = 500;
// 低いバイトからシフトアウト
shiftOut(dataPin, clock, LSBFIRST, data);
// 高いバイトからシフトアウト
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));
digitalWrite(clockPin、LOW)を呼び出します。
④この関数はソフトウェア実装です。より速いが特定のピンのみで動作するハードウェア実装を提供するSPIライブラリが有ります。