ピン番号、点灯/消灯時間 を設定して LED を点滅させてみた。(Raspberry Pi Pico)

つぶやき
#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()

コメント