arduino nanoで1対1でi2c通信をしたいです。
スレーブ側(センサ)にコマンド(3BYTE)を送信していますが、受信データを wire. read()で読み込んでも0しか返ってきません。センサからは、コマンド一回送信するとヘッダを含めて141byteのデータが送られてくる予定ですが、
今はとりあえず最初のヘッダの1バイトだけ読み込めるか試してます。
i2cスキャンでスレーブ側のアドレスは正しく読めているため、
接続は問題なさそうです。
ここからどうやって対処していけばいいのかご教示いただきたくお願いします。
void setup() {
Wire.begin();
}
void loop() {
Wire.beginTransmission(0x1E);
Wire.write(0xD0);
Wire.write(0x4C);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(0x1E, 1, true);
byte val = Wire.read();
Serial.print(val);
期待値は0x02なのですが、0としかシリアルモニタに表示されません。アドバイスを頂きたくよろしくお願いします。
お二方のアドバイスを頂き、送信データの状況を確認しました。
データシートを確認するとスレーブ側アドレスが0x68であり、訂正しております。(太字です。)
下記は訂正後の結果です。
void loop() {
Wire.beginTransmission(0x68);
Wire.write(0xD0);
Wire.write(0x4C);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(0x68, 1, true);
byte val = Wire.read();
Serial.print(val);
スレーブ側センサのデータシートに通信例が記載があり、以下のようになっています。
私が送信しているものとデータシートで差があるのは一番はじめの送信データです。データシートには0x68がありません。
下記の通り0xD0で送信したいのですが、
Wire.beginTransmissionは7ビットのためD0をどう送信したらいいのか悩んでおります。
下記の通り送信するためにはどう対応したらいいのでしょうか。ご教示いただきたくよろしくお願いします。
アドバイスを頂き、下記の通りセンサよりデータを受信できました。ありがとうございます。
ここでまた壁にぶつかっております。
ardiunoに受信データ数を増やすため以下の変更を行いました。
Wire.requestFrom(0x68, 141);
しかし、32バイト分しかバッファが存在しないため、141バイト分すべてが受信できません。
141バイト分を受信するためにどうしたらいいのでしょうか。
バッファが埋まっているのでクリアしてあげる必要があると思っています。考え方は間違えないでしょうか。
参考ソースご教示いただけるとありがたいです。 よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー