このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。 M5Stack

UIFlow2|タイマーコールバック関数 一定周期で処理を実行する方法

M5StackをIoT機器として利用する場合、センサ値の取得やLEDの点滅など、一定間隔で処理を繰り返したい場面は多くあります。

周期的な処理はどうやればいいのかな?

UIFlowでは、Timerモジュールを使って「一定間隔で関数を自動実行」することが可能。

本記事では、「タイマーコールバック関数」を使った処理の実装方法を解説していきます。

タイマー処理とは?

タイマーの役割

M5Stackを使った開発では、一定間隔で何かの処理を繰り返したいという場面がよくあります。

たとえば、

  • センサの値を100msごとに取得したい
  • LEDを1秒毎に点滅させたい
  • ログデータを5秒毎に保存したい

このような定期的な処理を実現するために便利なのがタイマーコールバック関数という関数を使った処理です。

UIFlow2でのタイマー処理の仕組み

UIFlow2ではTimerモジュールを使って、一定の間隔で自動的に関数を呼び出すことができます。

このときに呼び出される関数は、コールバック関数と呼ばれるものです。

マイコン開発では、ハードウェア割り込み処理(ISR)という方法で、一定周期の処理を実現することがあります。

UIFlow2では、より扱いやすい方法でこれを実現するために、タイマーコールバック関数(ソフトウェア割り込み)という処理で、タイマーが一定時間毎に関数を呼び出すことが可能です。

コールバック関数とは

コールバック関数とは、あらかじめ別の処理(今回の場合はタイマー)に登録しておいて、そこから自動的に呼び出される関数のことです。

UIFlow2では、Timerモジュールに関数を登録することで、一定時間毎にその関数が実行されるようになります。

UIFlow2におけるTimerモジュールの使い方

ここでは、M5Stack AtomS3でタイマーコールバック関数を使う方法について説明します。

Timerモジュールの追加方法

デフォルトの状態では、タイマーコールバック関数を使えないため、タイマーモジュールの追加をしていきます。

step
1
HardwareのResourceを追加

画面左のResourcesエリアのHardwareをクリックします。

step
2
Hardwareダイアログの中のTimerを選択

Hardwareのモジュール追加ダイアログが表示します。

Timerを選択してConfirmをクリック。

step
3
Timerモジュールが追加される

以上の操作で、コマンドパレットのHardwartセクションの中に、Timerが追加されます。

Timerコールバック関数の使い方

次に、Timerコールバック関数の使い方について説明します。

このブロックで、Timerを定義します。

Timer0 〜 Timer3 中から選択します。

Timerのモードと周期を設定します。

modeには次の2種類あります。

  • PERIODIC : 繰り返し実行
  • ONE SHOT : 1回実行

通常は、PERIODIC(繰り返し実行)を選択します。

period には、周期的に実行する関数の実行周期[msec]を設定します。

タイマーコールバック関数の実例

タイマーコールバック関数を使って、一定周期処理の実例を紹介します。

1秒毎にカウントアップするタイマーを作ってみます。

実行結果

コールバック関数実例の説明

カウント値の画面表示のために、ラベルを配置します。

lbl_count : カウント値表示用のラベル

タイマーコールバック関数用の設定をします。

  • タイマー:timer0
  • mode :PERIODIC
  • period:1000msec

カウント値保存用の変数 count を定義して、初期値:0 を設定します。

変数 count の値を ラベル lbl_count に表示します。

100msecのスリープを入れて、100msec毎に表示を更新します。

コールバック関数です。

今回は、この関数が呼び出されると変数 count に1を足します。

1秒ごとにコールバック関数が呼び出されるので、1秒のカウントアップタイマーとして動作します。

タイマーコールバック関数のまとめ

UIFlow2では、タイマーモジュールのコールバック関数を使うことで、一定間隔で処理を繰り返す周期的な動作を簡単に実装できます。

これは、M5StackをIoT機器として活用するうえで、とても便利な仕組みです。

ぜひ、さまざまな場面でタイマーコールバック関数を活用してみましょう。

-M5Stack