豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)の修正、
タイマー割り込み機能を追加しました。
・Tamakichi/ttbasic_MW25616L
ブランチ(随時更新) https://github.com/Tamakichi/ttbasic_MW25616L/tree/update_to_v007
2019/10/22 追記
ブランチ版をメインストリーム(V007) にマージして正式版として公開しました。※ブランチは削除しました。
メインストリーム(仕様確定版) https://github.com/Tamakichi/ttbasic_MW25616L
追加コマンド
■ タイマー割り込みの定義
ON TIMER 周期 GOTO | GOSUB 行番号|ラベル
周期はミリ秒単位 1 ~ 32767
■ タイマー割り込みのオン・オフ指定
TIMER ON | OFF
サンプルプログラム
10 ON TIMER 500 GOSUB "BLINK" 20 GPIO 13,OUTPUT:D=LOW:TIMER ON 30 "LOOP":GOTO "LOOP" 40 "BLINK":OUT 13,D 50 IF D ?"Blink!" 60 D=!D 70 RETURN
|
サンプルプログラムでは、
10行で500ミリ秒毎に、"BLINK"ラベルのある40行のサブルーチンを呼び出すように定義しています。
20行は、LED用の13ピンを出力設定にし、TIMER ONでタイマー割り込みを開始しています。
30行は、"LOOP"ラベルの行、すなわち30行にジャンプです。ここ30行で無限ループを繰り返します。
40行~70行は、タイマー割り込みで呼び出される処理です。LEDを点滅させて、画面に"Blink!"を出力します。
実行時の出力
う~ん、
タイマー割り込みが出来れば、
「何か面白いことが出来るのでは?」と思い、組み込んだのですが
使い道が浮かびません。
まあ、イベント処理の実装はちょっと勉強になったので良しとします。
タイマー割り込みは、Timer1ライブラリを利用しました。
コンパイルにも別途、Timer1ライブラリが必要です。 (2019/07/16 本体に組み込みました)
タイマーイベントキューは最大1個としています。
呼び出される処理が、追いつかない場合はイベントは破棄されます。
ですので、呼び出される処理内でカウントして時刻を刻むような処理において、
イベントが破棄された場合は、カウント数がずれます。
回避策として、Windowsみたいに、多重のコマンドイベントが重なる場合は、
1つのイベントにまとめて回数情報を付加する等の処理等が考えられるのですが、
まあ、これで良しとします。
ピン変化イベントも追加する予定でしたが、どうしよう ...
最近のコメント