#1でLEDがちゃんと光ることは確認できました。
それでも「ボタンを押しても何も起きない」場合、次に疑うのは入力です。
このページでは、「ボタンが本当に反応しているか」を切り分けます。
まず確認したい前提
ここでは、すでに次のことができている前提で進めます。
- GPIO15につないだLEDが、コードで確実に光る
- LEDは「確認用インジケータ」として使える
もしここが怪しければ、先に#1 出力編を見直してください。
完成形をもう一度見る(ボタン → LED)
まずは「本来やりたい形」を確認します。
ボタンを押したらLEDが光る、という最終形です。
from machine import Pin
import time
led = Pin(15, Pin.OUT)
button = Pin(19, Pin.IN, Pin.PULL_UP)
while True:
if button.value() == 0: # 押されている
led.value(1)
else:
led.value(0)
time.sleep_ms(10)
このコードが動かない場合、
「ボタン入力が取れていない」可能性が高いです。

まずは「ボタンの状態」をそのままLEDで見る
いきなり if 文を疑う前に、
ボタンの状態を、そのままLEDに出してみます。
これが、入力切り分けの基本です。
切り分け用コード(入力 → LED直結)
from machine import Pin
import time
led = Pin(15, Pin.OUT)
button = Pin(19, Pin.IN, Pin.PULL_UP)
while True:
led.value(1 if button.value() == 0 else 0) # 押したらLED ON(PULL_UPなので0/1を変換)
time.sleep_ms(10)
※PULL_UPのときは「押していない=1 / 押している=0」なので、
上のコードでは押したときにLEDが光るように変換しています。
この状態で確認すること
- ボタンを押していないとき、LEDはどうなるか
- ボタンを押したとき、LEDはどう変わるか
ここで重要なのが、PULL_UPです。
PULL_UP を使うと、値はこうなる
今回の配線では、ボタン入力に Pin.PULL_UP を使っています。
- ボタンを押していない → 1
- ボタンを押している → 0
直感と逆なので、ここで混乱する人がとても多いです。
でも、これは間違いではありません。
仕様どおりの正常な動きです。
よくある「ボタンが反応しない」原因
- PULL_UP を指定していない
- 押したときの値を
1だと思い込んでいる(※1) - GND がボタンまで届いていない
- ブレッドボードでボタンの向きが90度ずれている(※2)
※1
筆者も最初ここで混乱しました。
「押したら1」ではなく、PULL_UPだと押したら0になります。
混乱を防ぐなら、0/1を直書きせず、定数(名前つき)にしてしまうのも手です。
詳しい例は、こちらの記事に載せています:ボタンの短押し・長押し・ダブルクリック判定(MicroPython)
(ソースコード抜粋)

※2
正しい向きであれば、 SWのon/offの切り替えで電流が流れる/流れないが切り替わりますが、90度向きが違うと、下図のケースだと常に電流が流れることになりSWの役割が果たせません。

特に最後の「ボタンの向き」は、初心者が必ず一度はハマります。
ここまで確認できたら
ボタンを押すとLEDの状態が変わるなら、
入力(ボタン)は問題ありません。
それでも最終形が動かない場合、
次に疑うのは コードの判断・ロジックです。
次のページでは、
if文や条件分岐が思った通りに動かない原因を切り分けます。
焦らず、一段ずつ進めていきましょう。
目次:<電子工作が動かないとき>
前:【#1】出力編 / 次:【#3】判断・コード編
.png)


コメント