ここでは、前回作成した「スイッチで発光ダイオード(LED)を点灯・消灯させる回路」を活用し、LEDを1秒ごとに点灯と消灯を繰り返すプログラムを作成します。回路図などの詳細は「スイッチで発光ダイオード(LED)を点灯・消灯させる」をご参照ください。
タイマーの種類と説明
1.ONE_SHOT:タイマーが一度だけ動作し、指定時間後に処理を実行する。
2.PERIODIC :指定した周期で繰り返しタイマー割り込みが発生する。
1. ONE_SHOTモード(1回だけ処理)
from machine import Pin, Timer
led = Pin(15, Pin.OUT)
led.value(1) # LEDを点灯しておく
def one_shot_callback(timer):
led.value(0) # 一度だけLEDを消灯
print("ONE_SHOT: LEDを消灯しました")
timer = Timer()
timer.init(period=3000, mode=Timer.ONE_SHOT, callback=one_shot_callback)
# 3秒後に一度だけコールバック関数を呼ぶ
while True:
pass # メインループは空
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot
ONE_SHOT: LEDを消灯しました
2. PERIODICモード(繰り返し処理)
from machine import Pin, Timer
led = Pin(15, Pin.OUT)
def periodic_callback(timer):
led.toggle() # LEDの点灯・消灯を繰り返す
print("PERIODIC: LEDをトグルしました")
timer = Timer()
timer.init(period=1000, mode=Timer.PERIODIC, callback=periodic_callback)
# 1秒ごとに繰り返しコールバック関数を呼ぶ
while True:
pass # メインループは空
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot
PERIODIC: LEDをトグルしました
PERIODIC: LEDをトグルしました
PERIODIC: LEDをトグルしました
PERIODIC: LEDをトグルしました
PERIODIC: LEDをトグルしました
「トグル(toggle)」とは、**「状態を切り替える」**という意味です。
たとえば、LEDの場合、
・ 点灯している状態なら消灯に変える、
・ 消灯している状態なら点灯に変える、
という動きを指します。
つまり「トグルする」とは「ONとOFFを交互に切り替えること」です。
まとめ
ONE_SHOT
一度だけ処理したい場合(例えば遅延動作など)に使います。
PERIODIC
定期的に繰り返し処理を行いたい場合(LED点滅やセンサーの定期監視など)に使います。
⚙️ 周波数(freq)指定によるタイマー設定
📐 周波数(Hz)とは?
Hz(ヘルツ) は「1秒間に何回繰り返すか」を表す単位です。
例えば:
🔹 1 Hz(ヘルツ) → 1秒間に1回
🔹 2 Hz → 1秒間に2回
🔹 0.5 Hz → 1秒間に0.5回(2秒に1回)
🛠 MicroPython タイマーの設定方法
MicroPython のタイマーでは、割り込みの間隔を指定する方法が2つあります。
⏳ period:ミリ秒単位で割り込み周期を指定
🎯 freq:Hz(回/秒)単位で割り込み回数を指定
⚠️ period と freq はどちらか一方だけを指定し、同時に指定できません。
🎵 freq の使い方例
freq=1 → 1秒に1回割り込みが発生
freq=2 → 1秒に2回割り込みが発生
こうした設定により、秒間に何回処理を行いたいかを直感的に指定できるため便利です。
用途に応じて period と freq を使い分けてください。
freq 指定のサンプルコード(1HzでLEDを点滅)
from machine import Pin, Timer # GPIO制御用Pinとタイマー用Timerをインポート
led = Pin(15, Pin.OUT) # GPIO15を出力モードで初期化し、LEDに接続
# タイマー割り込み時に呼ばれるコールバック関数
def freq_callback(timer):
led.toggle() # LEDの状態を反転(点灯→消灯、消灯→点灯)
print("FREQ: LEDの状態が切り替わりました") # 動作確認用にメッセージを表示
timer = Timer() # タイマーオブジェクトを生成
# タイマーを初期化
# freq=1 は 1Hz(1秒間に1回)割り込みを発生させる設定
# mode=Timer.PERIODIC は繰り返し割り込みモード
# callback=freq_callback は割り込み時に呼ぶ関数を指定
timer.init(freq=1, mode=Timer.PERIODIC, callback=freq_callback)
# メインループは特に処理なしで空のままにしておく
# 割り込みが自動でLEDの点滅を制御するため
while True:
pass
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot
FREQ: LEDの状態が切り替わりました
FREQ: LEDの状態が切り替わりました
FREQ: LEDの状態が切り替わりました
コメント
コメントを投稿