LoginSignup
2
2

More than 3 years have passed since last update.

UIFlow で RoverC とToF Unitを同時に使う方法

Last updated at Posted at 2020-09-04

概要

UIFlowでRoverC HATとToF Unitを同時に使うと不安定になる問題の解決方法。
文章は短いですが、結構大変だったのでメモ書きです。

経緯と問題

M5Stack(M5SickC)のプログラムをMakecode風にビジュアルに開発できるUIFlowを試しています.これはM5StickCのHATやGroveのUnit用のライブラリが組み込まれていて大変便利です。

迷路探索ロボットの実験のためにRoverCToF距離センサユニットを組み合わせて次のような簡単なテストプログラムで試してみました。
2020-09-04-09-27-31.png
事前にUnitsでToFを、HatでRoverCを追加し、数値を表示するためにLabelを追加しています。

しかしこれだけのプログラムでも、"I2C bus error (19)"と出て同時に使えません.距離センサの読み取りとRoverCへの動作命令の間に50ミリ秒程度のウェイトをいれるとうまくいく場合はありますが,エラーが出ることもあり,どうにも不安定です.

解決方法

調べてみても,なかなか同じような問題に当たっている人がいないようです.ソースコードらしきものを発見してみてみると、ToFユニットとの通信が、70ミリ秒ごとのタイマー割り込みで値の取得をしているようです。どうもこのタイマー割り込みが怪しいと思って、tof1.deinit()でタイマーをとめて,tof1._update()をしてから値を取得するようにすると...ビンゴ!。エラーが出なくなり、さらにセンサの値の更新も高速になりました.
2020-09-04-09-30-19.png

最終的にこの_tof.pyを参考にしながら、タイマー割り込みを使わないCustom Blockを作成しました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2