2018年1月5日金曜日

Microbit の稼働時間(ミリ秒)があんまり正確ではない問題

Microbit で時計やタイマーやストップウォッチを作ってみたくなるのは誰しもが通る道かと思いますが、いざ「稼働時間(ミリ秒)」や「一時停止(ミリ秒)」を使ってやってみると、全然正確ではないことがわかります。

まず試しに、このような3分タイマーを作ってみました。
タイマー開始と終了時にニャンキャットが流れます。
エディターでみる
シミュレーター上では特に問題ないのですが、実機で動かして実際のストップウォッチで計ってみると、だいたい3分1秒くらいで音がなります。
これを10分にしてみると、だいたい10分3秒くらいに音がなりました。
どうやら1分間で約0.3秒ほど遅れるようです。

まぁ数秒のズレならまだ良いのですが、そもそも私は1時間毎にお知らせするタイマーを作りたかったので、これでは1時間18秒毎にお知らせするタイマーになってしまいます。
(2時間後には36秒もズレるわけです)

ただ、何度試しても結果が大きく変わることはなかったので、ある程度正確に「遅れている」ようです。
つまりこの遅れ分、早めてあげればもう少し精度が上げられそうです。

ということで、60 - 0.3 = 59.7 = 59700ミリ秒を1分としてカウントするタイマーを作ってみました。
エディターでみる
上記のとは変数「分」の使い方が変わっている点に注意w

今度は開始は「ピコーン!」でアラームを「ニャンキャット」にしました。
また、簡素化のためグラフ表示は無しw

これで3分程度ならば、気にならないレベルになりました。

しかし、1時間で試してみたところ、まだ数秒ズレが発生してしまいます。
しかも困ったことに試す度に微妙に結果が異なるようになってしまいました。
流石にこのレベルになると、電源や気温、個体差などによって変化してしまうのかもしれません。

私の環境では、59690ミリ秒を1分とすることで、1時間あたりの誤差を1秒以下にすることができました。
そのあたりは環境に合わせ、みなさん調整してみてください。

おしまい。