目次
- Raspberry Pi Pico が想定外の行動を起こした。。。
- 何が原因?(探究中)
- 暫定対策
- あとがき
Raspberry Pi Pico が想定外の行動を起こした。。。
Rasprry Pi Picoの初心者セットで学習中、以下のような回路とプログラムで実行すると、ボタンを押していないのに”Button Pressed"という標準出力が出た。
(ざっと書きなので、冗長なところは目を瞑ってもらいたい、、、)
colorfullLight_Button.py
import machine
import utime
red = machine.PWM(machine.Pin(13))
green = machine.PWM(machine.Pin(14))
blue = machine.PWM(machine.Pin(15))
red.freq(1000)
green.freq(1000)
blue.freq(1000)
red_button = machine.Pin(9, machine.Pin.IN)
green_button = machine.Pin(10, machine.Pin.IN)
blue_button = machine.Pin(11, machine.Pin.IN)
yellow_button = machine.Pin(12, machine.Pin.IN)
RGB_element = [0, 0, 0]
def interval_mapping(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
def color_to_duty(rgb_value):
rgb_value = int(interval_mapping(rgb_value,0,255,0,65535))
return rgb_value
def color_set(red_value,green_value,blue_value):
red.duty_u16(color_to_duty(red_value))
green.duty_u16(color_to_duty(green_value))
blue.duty_u16(color_to_duty(blue_value))
# ボタンを押すと、シェルにメッセージ+各PINのValue出力(確認用)
while True:
if red_button.value() == 1:
print("RED pressed")
RGB_element = [255, 0, 0]
color_set(RGB_element[0], RGB_element[1], RGB_element[2])
utime.sleep(1)
print(f"red_button.value():{red_button.value()}")
print(f"green_button.value():{green_button.value()}")
print(f"blue_button.value():{blue_button.value()}")
print(f"yellow_button.value():{yellow_button.value()}")
elif green_button.value() == 1:
print("GREEN pressed")
RGB_element = [0, 255, 0]
color_set(RGB_element[0], RGB_element[1], RGB_element[2])
utime.sleep(1)
print(f"red_button.value():{red_button.value()}")
print(f"green_button.value():{green_button.value()}")
print(f"blue_button.value():{blue_button.value()}")
print(f"yellow_button.value():{yellow_button.value()}")
elif blue_button.value() == 1:
print("BLUE pressed")
RGB_element = [0, 0, 255]
color_set(RGB_element[0], RGB_element[1], RGB_element[2])
utime.sleep(1)
print(f"red_button.value():{red_button.value()}")
print(f"green_button.value():{green_button.value()}")
print(f"blue_button.value():{blue_button.value()}")
print(f"yellow_button.value():{yellow_button.value()}")
elif yellow_button.value() == 1:
print("YELLOW pressed")
RGB_element = [255, 255, 0]
color_set(RGB_element[0], RGB_element[1], RGB_element[2])
utime.sleep(1)
print(f"red_button.value():{red_button.value()}")
print(f"green_button.value():{green_button.value()}")
print(f"blue_button.value():{blue_button.value()}")
print(f"yellow_button.value():{yellow_button.value()}")
出力-正常
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot
RED pressed
red_button.value():0
green_button.value():0
blue_button.value():0
yellow_button.value():0
GREEN pressed
red_button.value():0
green_button.value():0
blue_button.value():0
yellow_button.value():0
BLUE pressed
red_button.value():0
green_button.value():0
blue_button.value():0
yellow_button.value():0
YELLOW pressed
red_button.value():0
green_button.value():0
blue_button.value():0
yellow_button.value():0
ただ、時たま下記のようになる。
出力-異常
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot
RED pressed
red_button.value():1
green_button.value():0
blue_button.value():0
yellow_button.value():0
RED pressed
red_button.value():1
green_button.value():0
blue_button.value():0
yellow_button.value():0
RED pressed
red_button.value():1
green_button.value():0
blue_button.value():0
yellow_button.value():0
RED pressed
red_button.value():1
green_button.value():0
blue_button.value():0
yellow_button.value():0
… # 以上の感じでSleep設定に基づき1秒ごとに続く。
何が原因?(探究中)
標準出力を見たところ、valueが1のままになってる。
ボタンの仕様なのかな、、、?
暫定対策
雑にリセットするプログラムを用いて、強制リセットすることにした。
reset.py
import machine
machine.reset()
あとがき
こんな簡単なことでもつまりながらであればかなり勉強になる!
当方20後半に差し掛かって、小学生でもできる電子工作でキャッキャしている毎日。
まだ手をつけていない方が万が一いたら(そんな人はこの記事を観にこないだろうが)、おすすめです↓
SunFounder Raspberry Pi Pico 用のスターターキット
(販促やプロモではなく、純粋な推しです)