button.when_pressed 在实际按下按钮之前被激活

button.when_pressed is activated before actually pressing the button

from twython import Twython
from time import sleep
from gpiozero import LED, Buzzer, InputDevice, Button
import RPi.GPIO as GPIO
import sys
import Adafruit_DHT
from signal import pause
import mysql.connector


GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(13,GPIO.OUT)
no_rain = InputDevice(18)

bz = Buzzer(19)

n = True

led = LED(23)
button = Button(13, pull_up=False)



def printstate():
 print("pressed")

n = True

if no_rain.is_active:
 bz.off()
 while n == True:
      if no_rain.is_active:
          print("It's raining, get your clothes out.")  
              #bz.off
          ledON()
          humidity, temperature = Adafruit_DHT.read_retry(11, 17)
          print('Temp: {:.1f} C'.format(temperature))
              print('Humidity: {:.1f}'.format(humidity))
          n = False

button.when_pressed = printstate()




pause()

button.when_pressed 被注册为按下,即使我实际上并没有按下我的 GPIO 上的按钮 raspberry pi。

松开和按下都试过了,请问有没有可以让蜂鸣器停止的按钮?

节目结束了蜂鸣器还在响

button.when_pressed 需要一个函数,但您将函数响应分配给它。 IE。该函数在您分配时调用,而不是在按下按钮时调用。

如果您将函数更改为 return 而不是 None,您也可能会在按下按钮时遇到异常。让错误更加明显。

改为:

button.when_pressed = printstate  # without the parentheses