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

3 次查看(过去 30 天)
PROJECT SR
PROJECT SR 2017-11-30
评论: PROJECT SR 2017-12-30
ゲームパッドジョイスティックの角度をワイヤレス通信で送信送信しようとしています. 方法は添付しました資料の様に,ホスト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 个评论
michio
michio 2017-12-1
参照し易いよう画像を貼り付けます。

请先登录,再进行评论。

采纳的回答

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

请先登录,再进行评论。

更多回答(1 个)

Takafumi
Takafumi 2017-12-1
とりあえす、 TimeOut の設定を、長く取ってみてください。デフォルトは10sだと思います。
i2csensor.TimeOut = 60*60;
  1 个评论
PROJECT SR
PROJECT SR 2017-12-2
编辑:PROJECT SR 2017-12-4
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です.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Simulink でサポートされているハードウェア 的更多信息

Community Treasure Hunt

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

Start Hunting!