複数マイコンを同時に管理するために作った。
- マイコンの識別にはID(1~254)を使っている。0は使えない
- PC・マイコンどちらを初期化しても自動的にIDの特定、通信の接続が行われる
- 必要なピンを指定するとあとからIDの確認、変更ができる
- float,boolをデータとして送信可能
SerialMsg
構造体でデータ送信が可能send_log(std::string)
でログを送信 ※PC側ではこの文字列は一切使えないsend_msg(SerialMsg)
で情報を送信、topicで公開される
- pcから受け取ったデータは
received_flags
(bool),received_nums
(float) に格納される - 値を使用したい場合はインスタンスから直接取得する
- インスタンス宣言時にピンを指定すると、IDの確認・変更機能が有効化
- IDを宣言時に設定していると変更は無効
- 一度ボタンを押すとセットIDモードになり、その後ボタンを押した回数がIDとなる
- しばらく押さずにいるとセットIDモードが終了、IDの変更が適応される。
log
とmsg
はバス詰まり対策のため、一定間隔(20ms)を空けて送信される- 同時に送信すると、送られない場合がある
- ROS2側の手順:ros2_serial_manager README
serial_manager
をlib
フォルダに入れてインクルードSerialManager
クラスのインスタンスを作成
(引数:mbed::BufferedSerial
,ID
)-> IDの変更不可
or
(引数:mbed::BufferedSerial
,表示用ledピン
,変更用ユーザーボタンピン
)->初期IDなし(ソフトリセットしても現在の値を保持)
or
(引数:mbed::BufferedSerial
,ID
,表示用ledピン
,変更用ユーザーボタンピン
)->初期IDあり(ソフトリセットすると初期に戻る)
- 実はpc側でserial_managerが立ち上がっていなければ何も送らない。
なので、あろうがなかろうがほぼ変わらない状態になる。