button.when_pressed активируется перед фактическим нажатием кнопки - PullRequest
0 голосов
/ 21 февраля 2020
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.

Попробовал и отпустил и нажал, есть ли в любом случае мне использовать кнопку для остановить зуммер?

Зуммер гудит, даже если программа закончилась.

1 Ответ

0 голосов
/ 21 февраля 2020

button.when_pressed ожидает функцию, но вы назначаете ей ответ функции. Т.е. функция вызывается при ее назначении, а не при нажатии кнопки.

Если вы измените функцию так, чтобы она возвращала что-то отличное от None, вы, вероятно, также получите исключение при нажатии кнопки. Сделав ошибку немного более заметной.

Измените ее на:

button.when_pressed = printstate  # without the parentheses
...