
イベントタイマーで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:著作権フリー画像素材集」から使わせていただきました。
宜しくお願い致します。
いいなと思ったら応援しよう!
