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

조회 수: 8 (최근 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에서 I2C Devices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!