Raspberry Piの出力がヘンだ

## 目次
- Raspberry Pi Pico が想定外の行動を起こした。。。
- 何が原因？（探究中）
- 暫定対策
- あとがき

## Raspberry Pi Pico が想定外の行動を起こした。。。
Rasprry Pi Picoの初心者セットで学習中、以下のような回路とプログラムで実行すると、ボタンを押していないのに”Button Pressed"という標準出力が出た。
(ざっと書きなので、冗長なところは目を瞑ってもらいたい、、、）
![ColofulLoight_Button.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1988778/51864371-5323-9300-0a9d-317c5396987b.png)

```py: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()}") 
```

```sh:出力-正常
>>> %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
```

ただ、時たま下記のようになる。

```sh:出力-異常
>>> %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のままになってる。
ボタンの仕様なのかな、、、？

## 暫定対策
雑にリセットするプログラムを用いて、強制リセットすることにした。

```py:reset.py
import machine

machine.reset()
```

## あとがき
こんな簡単なことでもつまりながらであればかなり勉強になる！
当方20後半に差し掛かって、小学生でもできる電子工作でキャッキャしている毎日。
まだ手をつけていない方が万が一いたら（そんな人はこの記事を観にこないだろうが）、おすすめです↓
[SunFounder Raspberry Pi Pico 用のスターターキット](https://www.amazon.co.jp/gp/product/B09Z6DJ633/ref=ppx_yo_dt_b_asin_image_o02_s00?ie=UTF8&psc=1)
(販促やプロモではなく、純粋な推しです)