Arduino 5) タイマー処理を考える。
2016.11.28
タイマー処理は特定の周期でプログラムを実行させたいときにとても便利な機能です。
単純に待ち時間を設けたいだけならdelay()を指定するだけでいいのですのが、
プログラムが複雑になってくるとコードが汚くなるだけでなく、
正確なタイミングでコードを走らせることも難しくなっていきます。

そこでタイマーによるインタラプト処理を試してみました。

MsTimer2.zip
http://playground.arduino.cc/Main/MsTimer2



このコードを作るに当たって、ちょっと悩みました。
LCDの表示をtimercount()内に記述しても実行されないのです。
なぜかスルーされます。
loop()内に書くことで上手く表示されました。
追求すると沼にハマりそうなので、ここはそういう物という理解でいきます。



ただ、Windows系のプログラムに慣れてしまうと、これだけではちょっと物足りないですね。
できれば、タイマーを複数同時に走らせたいところ。
そこで調べてみると、複数同時に動かせるライブラリがあるようですね。
マルチタスクが実装されていないArduinoでどのように実現しているのでしょう?

Metro-Arduino-Wiring-master.zip
http://playground.arduino.cc/Code/Metro

2つ同時に動くタイマーを記述してみました。
どこまで正確に時を刻んでいるかは謎ですが、うまく機能しているようです。





でも、求めている物が微妙にちがう。
このライブラリは割り込みが起きたときのフラグを保持して
loop()内で判別して処理するというもの。
こうなるとloop()内に重い処理を書いてしまうと、
正確な時間を刻むことは難しい。
一長一短ですねぇ。
結局は最初に実験したMsTimer2.hを駆使し、
コーディングでなんとかするしか無さそうです。

先人のソースコードを沢山読み解けば
もっといい書き方があるのかもしれませんが・・・
2016.11.28 22:15 | 固定リンク | Arduino

- CafeNote -