2017-06-05 14 views
0

何がwire.read()< < 8 | wire.read()do?このコードから判断必要説明acc_x = Wire.read()<< 8 | Wire.read();

while(Wire.available() < 14);           
until all the bytes are received 
acc_x = Wire.read()<<8|Wire.read();         
acc_y = Wire.read()<<8|Wire.read();         
acc_z = Wire.read()<<8|Wire.read();         
temp = Wire.read()<<8|Wire.read();         
gyro_x = Wire.read()<<8|Wire.read();         
gyro_y = Wire.read()<<8|Wire.read();         
gyro_z = Wire.read()<<8|Wire.read(); 

答えて

1

Iは8ビットの数よりも多く、おそらく16ビットなどのデバイスレポートの加速度を言うだろうが、一度に8ビット...ので、acc_x値を仮定することと定義されますスケッチの整数。だから私は16ビットの値を8ビットで一度に満たすと思います。

したがって、Wire.read()はおそらく8ビット値を取得します。次の部分<<8は、その値を8ビット左にシフトし、効果的に256を掛けます。第2のWire.readorで、最初は|で、最初のバイトに効果的に加算されます。このリードシフトまたはプロセスは、デバイスが供給するすべての測定に対して繰り返されます。要約するよう

00001010 // let's assume this is the result of the first read 
<<8 gives 00001010_00000000 
00001111 // let's assume this is the result of the second read 
00001010_00000000 | 00001111 // | has the effect of adding here 

gives 00001010_00001111 //final acceleration value 

は、16ビットの数は、第二の結果を(追加)INGの次にor、そのビットがより顕著にするために、それを左シフトする最初の読み取りからの数を取ることによって構築されます読む。

タグの示唆しているように、これはビット単位の演算またはビット単位の操作と呼ばれ、Arduinoと8ビットの「ポート」に配列された入力ピンを持つすべてのマイクロコントローラプラットフォームでよく使用されます。このように一度に1バイトずつデータを供給して周辺機器とのインタフェースを行うピン数を減らしてください。