プロフィール

MsTimer2 のライブラリの新し目のAVR対応のための修正など

今日、タイマーを使ったスケッチを利用して制作しているものの調整に使えないかと考えて、
MsTimer2(ミリ秒単位で指定するタイマ)
MsTimer2というライブラリがあることを知り、試しにサンプルスケッチをATMega1284にULしてみたところ、MsTimer2::setで実行した関数を全く実行せず、反応がなかった。そこで調べ物
Arduino and ATmega1284(P) Problem Issues
リンク先の例は、恐らくイーサネットのライブラリの修正だと考えられるが、ライブラリの内容からして定数が対応していないとにらんで参考に調べる。Arduino ISPのインストール先以下にあるメインのインクルードファイルなどを見ると、例えば68行など

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__)

AVR種別の定数が新しいものに対応しているのに対し、該当ライブラリのほうは古いようでAVR種の定数が追従できていないので、MsTimer2.cpp のファイルの内容(/*〜*/コメントアウトしたもの)を以下の追加行に全て変更してみると、動作した。

/*
#if defined (__AVR_ATmega168__) || defined (__AVR_ATmega48__) || defined (__AVR_ATmega88__) || defined (__AVR_ATmega328P__) || (__AVR_ATmega1280__)
*/
#if defined (__AVR_ATmega168__) || defined (__AVR_ATmega48__) || defined (__AVR_ATmega88__) || defined (__AVR_ATmega328P__) || (__AVR_ATmega1280__)|| defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__)