前提
Raspberry Pi Picoに可変抵抗つまみ(4段階切替)を接続して、つまみの段階に応じてモータ速度を変える仕組みを考えています。つまみを切り替えるたびに割り込みを行って所定の動作を行うプログラムをMicroPythonで実行してみましたが、最初につまみを切り替えたときは割り込みが働いて所定のCallback関数が動作しますが、その後はつまみを切り替えても割り込みがされず、最初のCallback関数が動作し続けている状況です。アドバイスいただけましたら幸いです。(目的が実現できれば割り込みにはこだわりません)
発生している問題・エラーメッセージ
abc abc abc abc 1 low 1 low 1 low 1 low 0 low 0 low 0 low 0 low 0 low 0 low 0 low 0 low 0 low 0
該当のソースコード(MicroPython)
Python
1from machine import Pin 2import utime 3 4#可変抵抗の4段階切替え 5stop_b = Pin(0, Pin.IN) 6low_b = Pin(2, Pin.IN) 7middle_b = Pin(4, Pin.IN) 8high_b = Pin(5, Pin.IN) 9 10def callback0(p): #本来はwhile True文のなかにモータ動作(stopモード)のプログラムを入れたい 11 while True: 12 print(stop_b.value()) 13 print('stop') 14 utime.sleep(0.2) 15 16def callback1(p): #本来はwhile True文のなかにモータ動作(低速モード)のプログラムを入れたい 17 while True: 18 print(low_b.value()) 19 print('low') 20 utime.sleep(0.2) 21 22def callback2(p): #本来はwhile True文のなかにモータ動作(中速モード)のプログラムを入れたい 23 while True: 24 print(middle_b.value()) 25 print('middle') 26 utime.sleep(0.2) 27 28def callback3(p): #本来はwhile True文のなかにモータ動作(高速モード)のプログラムを入れたい 29 while True: 30 print(high_b.value()) 31 print('high') 32 utime.sleep(0.2) 33 34 35stop_b.irq(trigger = Pin.IRQ_RISING, handler = callback0) #stopモードに切替 36low_b.irq(trigger = Pin.IRQ_RISING, handler = callback1) #低速モードに切替 37middle_b.irq(trigger = Pin.IRQ_RISING, handler = callback2) #中速モードに切り替え 38high_b.irq(trigger = Pin.IRQ_RISING, handler = callback3) #高速モードに切り替え 39 40while True: 41 print('abc') 42 utime.sleep(0.2) 43 44 45 46 47
試したこと
スイッチを低速モードに切り替えたときに、割り込みが入ってcallback1関数が呼び出され、1, low が繰り返されますが、その後中速モードに切り替えても、0, low が出力されているため、middle_b.irqの割り込みが働いていないようです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答2件
あなたの回答
tips
プレビュー