1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Piの出力がヘンだ

Posted at

目次

  • Raspberry Pi Pico が想定外の行動を起こした。。。
  • 何が原因?(探究中)
  • 暫定対策
  • あとがき

Raspberry Pi Pico が想定外の行動を起こした。。。

Rasprry Pi Picoの初心者セットで学習中、以下のような回路とプログラムで実行すると、ボタンを押していないのに”Button Pressed"という標準出力が出た。
(ざっと書きなので、冗長なところは目を瞑ってもらいたい、、、)
ColofulLoight_Button.png

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 用のスターターキット
(販促やプロモではなく、純粋な推しです)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?