前提・実現したいこと
Arduino初心者です.
Arduino複数台(Due1台,Uno1台,nano every2台)を用いて,圧力変動を測定するシステムを作ろうとしています.
計測は同じ種類の圧力センサ(MS5837-02BA)を4つ使用しており,I2C通信にてそれぞれのArduinoに計測値を返すようになっています.
ここで得られた数値を,代替ピン(A4,A5ピン)を用いたI2C通信でDueにまとめるようなシステムにしたいのですが,以下のような問題に直面しています.
発生している問題・エラーメッセージ
センサとArduino間の通信のためにWireライブラリが使用されており,Arduinoがマスター,センサがスレーブという関係で通信が行われています.
そのため,それぞれのArduino子機からDueにI2Cを用いて送信しようとすると,こちらでもWireライブラリが必要となってしまう上,Dueがマスター,その他子機がスレーブという関係性になってしまいます.
Dueに関してはWireライブラリによってセンシング,Wire1ライブラリでrequestFromなど呼び出し処理を行うため競合はしないのですが,その他Arduino子機ではWireライブラリが一つしかないので2種以上のI2C通信ができないです.
試したこと
Arduino子機にて,最初はWire.begin()でマスターとして通信を行いデータを取得し,
データの取得が終わったらWire.begin(8)などでスレーブアドレスを設定しました.
DueからはWire1.requestFrom(8,4)などで呼び出し,子機はデータを返す,送信が終わったら再びWire.begin()でセンサに対してマスターになる・・・というプログラムを書いてみたのですが,
実際の挙動では子機は常にマスターとなったままで,Dueで値を呼び出すことができませんでした.
このようなマスターとスレーブの切り替えはそもそも仕組みとしてできなかったりするのでしょうか?もしくはプログラムの考え方が未熟なだけなのでしょうか?
Arduinoの操作もこのサイトでの質問も慣れていないため,乱文ご容赦ください.
WireライブラリやArduino間I2Cの使用にはこだわっていないので,もし別でよりスマートな方法がございましたらそちらも検討させていただきます.
なにとぞよろしくお願いします.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。