#on_off_LED.py
from machine import Pin, Timer
class BlinkingLED:
def __init__(self, pin_num, on_time_ms, off_time_ms):
# 指定されたピン番号を出力用に初期化(LED制御用)
self.led = Pin(pin_num, Pin.OUT)
# 点灯時間(ミリ秒単位)
self.on_time = on_time_ms
# 消灯時間(ミリ秒単位)
self.off_time = off_time_ms
# 点灯用タイマー(1回または周期的に処理を呼び出すためのタイマー)
self.on_timer = Timer()
# 消灯用タイマー
self.off_timer = Timer()
def start(self):
# 初期状態ではLEDを消灯しておく
self.led.value(0)
# 一定時間(off_time)後にLEDを点灯するスケジュールを開始
self._schedule_on()
def _led_on(self, timer):
# この関数は、LEDを点灯させる(タイマーから呼ばれる)
# LED ON
self.led.value(1)
# 点灯タイマーを停止(次の処理に向けて再利用するため)
self.on_timer.deinit()
# on_time(点灯時間)後に _led_off を呼び出すようスケジュール
self.off_timer.init(
mode=Timer.ONE_SHOT, # 一度だけ呼ばれるタイマー
period=self.on_time, # ミリ秒指定の時間後に発火
callback=self._led_off # 呼び出す関数
)
def _led_off(self, timer):
# この関数は、LEDを消灯させる(タイマーから呼ばれる)
# LED OFF
self.led.value(0)
# 消灯タイマーを停止
self.off_timer.deinit()
# off_time(消灯時間)後に _led_on を呼び出すようスケジュール
self.on_timer.init(
mode=Timer.ONE_SHOT, # 一度だけ呼ばれるタイマー
period=self.off_time, # ミリ秒指定の時間後に発火
callback=self._led_on # 呼び出す関数
)
def _schedule_on(self):
# 最初の起動時にLEDを点灯させるための予約処理
self.on_timer.init(
mode=Timer.ONE_SHOT, # 一度だけ呼ばれる
period=self.off_time, # off_timeの後に点灯開始
callback=self._led_on
)
def stop(self):
# LEDの点滅を完全に停止する処理
self.on_timer.deinit() # 点灯タイマーを無効化
self.off_timer.deinit() # 消灯タイマーも無効化
self.led.value(0) # LEDを消灯して終了
#main.py
# 内蔵LEDを 1秒点灯、3秒消灯で繰り返す
import on_off_LED
led_blinker = on_off_LED.BlinkingLED(pin_num="LED", on_time_ms=1000, off_time_ms=3000)
led_blinker.start()
コメント