shiftOut()
概要
shiftOut()は、1バイトのデータを、1ビットずつ送信します。
shiftOut()のリファレンスはこちらをご覧ください。
ソースコード
shiftOut()は、hardware/arduino/avr/cores/arduino/wiring_shift.c に定義されています。以下に全ソースコードを示します。
|
|
入力はdataPin、clockPin、bitOrder、valで、すべてuint8_tです。戻り値はありません。
|
|
8ビット分のデータを書き出すためループします。その中で、1ビットずつ値を出力します。
|
|
bitOrderがLSBFIRSTの場合は、入力値valの最下位ビットから1ビットずつ送信します。valと1のビット単位ANDをとり、valの第0ビットを送信します。その後、valを右に1ビットシフトすることで、次に送信するビットを、valの第0ビットになるようにします。
bitOrderがLSBFIRSTでない場合は、入力値valの最上位ビットから1ビットずつ送信します。valと128(=0B10000000)のビット単位ANDをとり、valの第7ビットを送信します。その後、valを左に1ビットシフトすることで、次に送信するビットを、valの第7ビットになるようにします。
値の送信には、digitalWrite()を使います。
最後に、clockPinをHIGHにし、直後にLOWとすることで、パルスを一つ送信します。
|
|
shiftOut()は、8ビット固定で書き出すので、異なるビット数の書き出しを行う場合には、このソースを参考にすればいいと思います。
バージョン
Arduino AVR Boards 1.8.6
最終更新日
March 21, 2023