shiftOut()

名称

shiftOut()

説明

1バイトのデータから1ビットずつ取り出す。最上位ビット(MSB、一番左)もしくは最下位ビット(LSB,一番右)から取り出し始める。各ビットがデータピンに順に書き出された後、そのビットが利用可能であることを示すためにクロックピンにパルス(highの後low)が一つ出力される。

注意:立ち上がりクロックのデバイスを利用するときは、shiftOut()を呼ぶ前にクロックピンをLOWにしておく必要がある。例えば、digitalWrite(clockPin, LOW)を実行する。

shiftOut()は、ソフトウェアによって実装されている。特定のピンでしか動作しないが、より高速のハードウェア実装を提供するSPIも参照のこと。

書式

void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);

引数

dataPin各ビットを出力するピン。
clockPindataPinに正しい値が出力された後、 パルスを出力するピン。
bitOrderビットを出力する開始する順序。MSBFIRST(MSBから開始)もしくはLSBFIRST(LSBから開始)を指定する。
valueデータを取り出す値。

戻り値

なし。

使用例

回路図は、シフトレジスタ(74HC595)を制御するためのチュートリアルを参照。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//**************************************************************//
//  Name    : shiftOutCode, Hello World                         //
//  Author  : Carlyn Maw,Tom Igoe                               //
//  Date    : 25 Oct, 2006                                      //
//  Version : 1.0                                               //
//  Notes   : Code for using a 74HC595 Shift Register           //
//          : to count from 0 to 255                            //
//****************************************************************
 
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
 
void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
 
void loop() {
  //count up routine
  for (int j = 0; j < 256; j++) {
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, j);   
    //return the latch pin high to signal chip that it 
    //no longer needs to listen for information
    digitalWrite(latchPin, HIGH);
    delay(1000);
  }
}

注意

dataPinとclockPinとは、pinMode()を呼び出すことによってOUTPUT(出力)に設定していなければならない。

shiftOut()は、現状、1バイト(8ビット)だけ出力されるようになっている。255より大きい値を出力するためには2段階の操作が必要である。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// MSBFIRSTのシリアル用
int data = 500;
// 上位バイトを出力する
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
// 下位バイトを出力する
shiftOut(data, clock, MSBFIRST, data);
 
// LSBFIRSTのシリアル用
data = 500;
// 下位バイトを出力する
shiftOut(dataPin, clock, LSBFIRST, data);  
// 上位バイトを出力する 
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));

参照

オリジナルのページ

https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/

Last Revision: 2019/02/21

実装の解析

shiftOut()

最終更新日

January 4, 2024

inserted by FC2 system