Arduino UNO R4 Minimaでタイマー割り込みってどうやるのかを調べてみる。正確にタイミングを制御したいときって、delayとかdelayMicrosecondsとかじゃだめだよね。Arduino UNO R3まではATMEGA328Pのタイマーを使ったり(レジスタ直叩き)、TimerOneとかMsTimer2とかライブラリを使ってた。でUNO
R4ではどうなん?
で調べてみると、FspTimerってのが最初っからあるらしい。
参考サイト
Arduino UNO R4のFspTimerライブラリの使い方
study1.ino
#include <FspTimer.h> static FspTimer fsp_timer; static PinStatus led_state; void timer_interrupt_callback(timer_callback_args_t* arg){ if(led_state==LOW){ led_state=HIGH; }else{ led_state=LOW; } digitalWrite(LED_BUILTIN,led_state); } void setup(void){ led_state=HIGH; pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN,led_state); uint8_t timer_type = 0; int8_t channel = FspTimer::get_available_timer(timer_type); fsp_timer.begin(TIMER_MODE_PERIODIC, timer_type, channel,10.0f, 0.0f, timer_interrupt_callback, nullptr); fsp_timer.setup_overflow_irq(); fsp_timer.open(); fsp_timer.start(); } void loop(void){ }
これで、10Hzでシンボルが入れ替わるのでパルスとしては5Hzになる。
はいなー。できたよー。
ところで、begin関数の引数のDutyはTIMER_MODE_PERIODICでは無視されるらしい。まぁ当然か。
コメントをお書きください