DelayからTimer割り込みに変更

カテゴリー:

Arduinoの処理でdelay命令を使用すると、その間Arduinoの処理が止まってしまうのでdelay命令を使用しないでタイマー割り込みで処理することにより、サーボモータ、LED、その他センサーを同時に動作させるように改良してみました。変更方法を簡単に説明してみます。
まずはdelay命令を使用した場合(LED1Sec毎の点滅)

タイマー割り込みの場合

タイマー(TIMER2)割り込みを利用して1mSec毎にtimer1mS()を呼び出すように設定し、1mSec,10mSec,100mSec,1Sec毎にフラグをtrueにして、LOOP処理の中でフラグをチェックしフラグがあれば処理を行うようにしています。今回の例は、最小1mSec単位の処理ができるようにしています。なお、タイマー(TIMER2)は、標準のライブラリーに入っていないのであらかじめライブラリにインストールする必要があります。ライブラリーにインストールする方法は『Arduino timer2』などで検索するといろいろ説明がでてきます。
なお、割り込みの中で使用している変数を割り込み外で使用するときはvolatileを付けないといけないようです。このあたりも検索して調べてもらうと詳しい説明が見つかると思います。
とりあえずマグボットの上下の動き、左右の動き、口のLEDの点滅を同時に制御したいと思いArduinoのサンプルプログラムをタイマー割り込みに変更して使用しています。