ラズベリーパイとアルディーノのI2C通信

29 views (last 30 days)
PROJECT SR
PROJECT SR on 30 Nov 2017
Commented: PROJECT SR on 30 Dec 2017
ゲームパッドジョイスティックの角度をワイヤレス通信で送信送信しようとしています. 方法は添付しました資料の様に,ホストPCからジョイスティックの角度の情報を,ラズベリーパイへワイヤレスで送信し 受信した情報をアルディーノへI2Cで送信します.
本件はラズベリーパイとアルディーノのI2Cでのご相談です.添付しましたmファイルでアルディーノへ通信し,添付しましたアルディーノのプログラムで 値を受信を試みているのですが, 一応ジョイスティックの傾きの情報を送信・受信することができました.
ですが,2つの問題があります.
1長時間接続ができない
5分ほどmatlabプログラムを起動すると,以下のエラー表示がされ,通信ができなくなります.原因がわかりません.それとも長時間起動しない仕様なのでしょうか?
エラー: raspi/recvResponse (line 697) Error writing to I2C bus.
エラー: raspi.internal.i2cdev/write (line 118) recvResponse(obj.Hw);
エラー: I2C (line 15) write(i2csensor,b,'int8');
2arduino側でマイナスの数値が受信されません.
 mファイルにジョイスティックの数値表示  t = [b]  とアルディーノへ送信する  write(i2csensor,b,'int8')  を記述しており,プログラムを起動すると,プロンプトではマイナスの値も表示  されるのですが,arduinoでは以下の様に右へ傾きを大きくすると1~127,  左へ傾きを大きくすると225~128の値が表示され,マイナスが表示されません.    
左傾き大128 ~ 左傾き小255 中央0 右傾き小1  右傾き大127  
解決方法をご存知の方がらっしゃいましたら,ご教示いただけないでしょうか. どうぞよろしくお願いいたします.
  1 Comment
michio
michio on 1 Dec 2017
参照し易いよう画像を貼り付けます。

Sign in to comment.

Accepted Answer

Kei Otsuka
Kei Otsuka on 4 Dec 2017
Edited: Kei Otsuka on 4 Dec 2017
ジョイスティックの値がマイナス表示されない件ですが、デバイス(送信)側が2の補数表現、Arduino(受信)側がストレートバイナリ表現を使用しているためと考えられます。 デバイス側の設定で数値表現の方法を変更できれば良いですが、そうでなければ受け取った側で処理をするしかありません。 値が128以上(8bitにおける符号bitが1)となった際に、受信した結果から256を減算して使ってみてください。
  5 Comments
Kei Otsuka
Kei Otsuka on 4 Dec 2017
データの受け手であるArduino側のBaudrateも変更が必要になりますが、そちらは変更済でしょうか?
Arduino側のBaudrate変更が難しい場合は、try/catchの構文の部分だけの変更を追加し、Baudrateの変更はせずに試してみてください。
PROJECT SR
PROJECT SR on 30 Dec 2017
Kei Otuka様
返信いただきありがとうございます.
上記通信時間の問題ですが,arduinoのダウングレード版を使用していたため,通信中に切れてしまうことがわかりました.
純正品で使用したところ,数時間のみの計測ですが,無事途中で通信が途切れることがなくなりました.
ありがとうございます.

Sign in to comment.

More Answers (1)

Takafumi
Takafumi on 1 Dec 2017
とりあえす、 TimeOut の設定を、長く取ってみてください。デフォルトは10sだと思います。
i2csensor.TimeOut = 60*60;
  1 Comment
PROJECT SR
PROJECT SR on 2 Dec 2017
Edited: PROJECT SR on 4 Dec 2017
Takafumi 様
ご回答いただきありがとうございます.
TimeOutを添付いたしましたファイルの様に書いてみたのですが,
エラーが以下の様に表示され,実行できません.
エラー表示***************************************************************
クラス 'raspi.internal.i2cdev' のプロパティ 'TimeOut' が認識されません。
エラー: I2C (line 11) i2csensor.TimeOut = 60*60; ***************************************************************** i2csensor.TimeOutの書く場所が違うのでしょうか.
補足
matlabプロンプトで,
>> i2csensor = i2cdev(mypi,'i2c-1','0x08')
と入力したところ
i2csensor =
i2cdev のプロパティ:
Bus: 'i2c-1'
Address: '0x08'
というようにTimeOutが表示されません.
matlabのバージョンかそれともラズベリーパイのバージョンの影響なのでしょうか.
使用しているバージョンは,matlab2017b,raspberrypi3です.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!