GPIO按钮不会改变打开的灯

时间:2017-11-16 01:28:45

标签: python raspberry-pi raspberry-pi3

我无法弄清楚我想在标题中说出什么,但我正在尝试更改在我的面包板上点击按钮时打开的灯的选择。虽然我对代码的判断是正确的,但是当前单击该按钮不会执行任何操作。由于我还在学习如何使用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()

1 个答案:

答案 0 :(得分:0)

在Python中,显式地将布尔值与True(或False)进行比较几乎总是一个错误。它充其量是完全没有意义的:比较的结果本身就是一个布尔值,为什么它在某种程度上可用,但原始值不是?而且它可能会产生积极的伤害,因为您正在抛弃Python处理各种价值观的能力,因为这样做了很多事情。 (非零数字,非空字符串或容器等)。在这种特殊情况下,GPIO.input()的返回值实际上是一个整数(我认为是0或1),因此将其与True进行比较可确保您的代码永远不会检测到按下按钮。所以,只需写下if GPIO.input(18): - 请注意,您所有的if括起来的那些括号是不必要的。