見出し画像

イベントタイマーでLチカ1

イベントタイマー割込み と machine.Pin を使ってLチカをやってみます。

500msec周期で割り込みを発生させ、割り込みの都度LEDの点灯/滅灯を切り替えることで点滅させます。(点滅周期は1秒)
LED1個をIO2に接続した例です。
uPyCraft を使って、動作を確かめます。

割り込み処理内でLEDのON/OFFを切り替える場合と、mainのループで切り替える場合の2例を試しました。

割り込み処理で直接LEDをON/OFF

作成したプログラムは以下の通りで、uPyCraft にコピペして試せると思います。(1秒周期ですからテスターでも確認出来ると思います。)
def int_500ms_timer0(t): 以下でLEDのON/OFFを切り替えています。

from machine import Pin
from machine import Timer


def int_500ms_timer0(t):    # イベントタイマー 500msec
  global led_b
  led_b.value(led_b.value() ^ 1)


def main():
  global led_b
  
  led_b = Pin(2, Pin.OUT)        # LED Blue  (Active=1)
  led_b.value(0)
  
  t0 = Timer(0)     # イベントタイマー起動
  t0.init(period=500, mode=Timer.PERIODIC, callback=int_500ms_timer0)
  
  while True:
    pass


if __name__ == '__main__':
  main()

def main(): 以下はIO2をLED出力に設定して滅灯させた後で、イベントタイマーを起動し、後は何もしない(pass)無限ループに突入します。

uPyCraft で DownloadAndRun するとLEDが点滅し始めます。
同じく Stop しても点滅が継続されます。
さらに disconnect するとLEDが滅灯します。

uPyCraft では Stop しても割り込みとその処理が継続するようです。
何らかの不具合でプログラムが停止しても、LEDが点滅を続けることになりそうです。

先の記事、イベントタイマー割込み と machine.Pin も参考にすれば概ね理解出来ると思っていますが、説明不足や間違いなどありましたら、コメントいただけると参考になります。
led_b.value(led_b.value() ^ 1) はLEDの状態(1or0)を読み出し、1をXORすることでON/OFF反転させています。

割り込みでフラグを立て、メインループでON/OFF

今度は割り込み処理では eventf を1にするだけで、LEDのON/OFFはメインループで行う例です。

from machine import Pin
from machine import Timer


def int_500ms_timer0(t):    # イベントタイマー 500msec
  global eventf
  eventf = 1


def main():
  global eventf
  eventf = 0
  
  led_b = Pin(2, Pin.OUT)        # LED Blue  (Active=1)
  led_b.value(0)
  
  t0 = Timer(0)     # イベントタイマー起動
  t0.init(period=500, mode=Timer.PERIODIC, callback=int_500ms_timer0)
  
  while True:
    if eventf > 0:
      led_b.value(led_b.value() ^ 1)
      eventf = 0


if __name__ == '__main__':
  main()
uPyCraft で DownloadAndRun するとLEDが点滅し始めます。
同じく Stop すると点灯または滅灯で停止します。
さらに disconnect するとLEDが滅灯します。

この場合も Stop しても割り込みは発生し続けていると思いますが、LEDをON/OFFしないので点滅が止まります。
動作中を示すインジケータはこちらの方が良いと思います。

おわりに

以下3つの記事で紹介した機能と回路を使って、実際にLチカをやってみました。
machine.Pin 使い方
イベントタイマー割込み 使い方

オームの法則で回路説明1

ひとつひとつの記事を簡潔にしながら、時々今回のように簡単な実施例を書いて行きたいと思います。

タイトル画像は「パブリックドメインQ:著作権フリー画像素材集」から使わせていただきました。

宜しくお願い致します。



出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。