UIFlow에서 RoverC와 ToF Unit을 동시에 사용하는 방법

개요



UIFlow에서 RoverC HAT와 ToF Unit을 동시에 사용하면 불안정해지는 문제를 해결합니다.
문장은 짧지만 꽤 힘들었기 때문에 메모 쓰기입니다.

경위와 문제



M5Stack(M5SickC)의 프로그램을 Makecode풍으로 비주얼로 개발할 수 있는 UIFlow 를 시험하고 있습니다. 이것은 M5StickC의 HAT와 Grove Unit 용 라이브러리가 내장되어있어 매우 편리합니다.

미로 탐색 로봇 실험을 위해 RoverCToF 거리 센서 유닛 을 조합하여 다음과 같은 간단한 테스트 프로그램으로 시도해 보았습니다.

미리 Units에서 ToF를, Hat에서 RoverC를 추가하고 숫자를 표시하기 위해 Label을 추가하고 있습니다.

그러나 이것만의 프로그램에서도, "I2C bus error (19)"라고 나와 동시에 사용할 수 없습니다. 거리 센서의 판독과 RoverC에의 동작 명령의 사이에 50밀리초 정도의 웨이트를 넣으면 잘 되는 경우는 있습니다만, 에러가 나오는 일도 있어, 아무래도 불안정합니다.

해결 방법



조사해도, 꽤 비슷한 문제에 맞고 있는 사람이 없는 것 같습니다. 소스 코드와 같은 것 를 발견해 보면, ToF 유니트와의 통신이, 70 밀리 세컨드마다의 타이머 인터럽트로 값의 취득을 하고 있는 것 같습니다. 아무래도 이 타이머 인터럽트가 이상하다고 생각하고, tof1.deinit()로 타이머를 멈추고, tof1._update()를 하고 나서 값을 취득하도록(듯이) 하면. . . 빙고! . 오류가 발생하지 않고 센서의 값 업데이트도 빨라졌습니다.


결국이 _tof.py를 참조하면서 타이머 인터럽트를 사용하지 않는 Custom Block을 만들었습니다.

좋은 웹페이지 즐겨찾기