GPIO 按钮不改变点亮的灯

GPIO Button not changing the light that is on

我很难弄清楚我想在标题中说什么,但我目前正在尝试更改只要单击面包板上的按钮就会打开的灯的选择。尽管我对代码的更好判断是正确的,但目前单击该按钮什么也没做。因为我仍在学习如何使用 Python、RaspPi,所以这非常令人沮丧。

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN)  #GPIO pin for colour change
GPIO.setup(20, GPIO.IN)  #GPIO for exit
GPIO.setup(22, GPIO.OUT) #GPIO Pin for red LED
GPIO.setup(12, GPIO.OUT) #GPIO Pin for blue LED

colorCheck = 0

try:
   while True:
    if ( GPIO.input(18) == True ):

        if (colorCheck < 3):
            colorCheck = colorCheck + 1;
        else:
            colorCheck = 1;

    if (colorCheck == 1):
        GPIO.output(12, GPIO.HIGH)
        GPIO.output(22, GPIO.LOW)
    elif (colorCheck == 2):
        GPIO.output(12, GPIO.LOW)
        GPIO.output(22, GPIO.HIGH)
    elif (colorCheck == 3):
        GPIO.output(12, GPIO.HIGH)
        GPIO.output(22, GPIO.HIGH)
except KeyboardInterrupt:
    GPIO.cleanup()

在Python中,明确地将布尔值与True(或False)进行比较几乎总是错误的。它充其量是完全没有意义的:比较的结果本身就是一个布尔值,为什么它可以以某种方式使用,但原始值却不行?而且它可能是有害的,因为你放弃了 Python 将范围广泛的值视为 "truthy" 的能力(非零数字、非空字符串或容器等) .在这种特殊情况下,GPIO.input() 的 return 值实际上是一个整数(我认为是 0 或 1),因此将它与 True 进行比较可以保证您的代码永远不会检测到按钮按下.所以只需写 if GPIO.input(18): - 请注意,您在所有 if 周围放置的那些括号是不必要的。