Wire.write((value >> 8) & 0x0F);
この分の意味を知りたいです。
また、自分は今レーザーセンサーの距離に応じてI2C通信でDACが距離を受信し、その距離によって電圧を変えたいと思っているのですが、ビット演算子などがいまいちわかりません。
宜しくお願い致します。
>>
は右シフト
&
は論理積(AND)
0x0F
は16進表記です。10進数にすると15。2進数にすると1111となります。
C言語、C++言語の基礎ですので、詳細はGoogleで解説サイトを探した方が良いと思います。
※文章だけだとわかりにくいので「図解」があるところがわかりやすいです。
その他はデータシートも確認すると良いかもです。
MCP4726搭載12ビットトD/A変換モジュール
https://akizukidenshi.com/download/ds/akizuki/AE_MCP4726.pdf
https://akizukidenshi.com/download/ds/microchip/MCP4726.pdf
papy様、回答ありがとうございます。
英語のデータシートにも徐々に慣れていきたいと思います。
もう一つ聞きたいのですが、実行例の()の中身はどのような数式で出されているのでしょうか?
宜しくお願い致します。
電圧:2.50V(512)の512の事でしたら、
analogRead(A0)の戻り値です。
analogRead(pin)に関しては、こちらが詳しく解説されています。
http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=2113
トップページはこちらです。
Arduino 日本語リファレンス
http://www.musashinodenpa.com/arduino/ref/
Serial.print(vout / 1024.0 * 5.0);
VOUTに出力された電圧を取得するの部分の、
1024.0はなんとなくわかっているのですが、
なぜ5.0をかけているのか教えていたでけないでしょうか。
宜しくお願い致します。
5.0はArduino Unoの動作電圧が5Vだからです。
Arduino Uno R3
https://www.switch-science.com/catalog/789/
--- analogRead(pin)の解説より引用 ---
Arduinoボードは10ビットADコンバータを搭載しています。
0から5ボルトの入力電圧を0から1023の数値に変換することができます。
---------------------------------------------------
10ビット = 1111111111(2進数) = 1023(10進数) = 0を含めると1024種類
いろいろと試行錯誤しているうちに何とかなりました。今回は本当に助かりました。ありがとうございます。
ツイート | ![]() |