Изменить светодиодный интервал мигания с помощью кнопки ввода в Python - PullRequest
0 голосов
/ 07 сентября 2018

Я хочу изменить время мигания светодиода при каждом нажатии кнопки.
Код, написанный на python, не реагирует на нажатия кнопок ввода. какие чейджи ему нужны? похоже, что обратный вызов не работает

import RPi.GPIO as GPIO
from time import sleep

inbutton = 13
outpin = 7
z = 1


def init():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(outpin, GPIO.OUT)
    GPIO.setup(inbutton, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    global z
    z = 1


def zest():
    global z
    if z == 1:
        z = 2
        while z == 2:
            GPIO.output(outpin, 1)
            print("led on")
            sleep(1)

            GPIO.output(outpin, 0)
            print("led off")
            sleep(1)

    elif z == 2:
        z = 1
        while z == 1:
            GPIO.output(outpin, 1)
            print("led on")
            sleep(2)

            GPIO.output(outpin, 0)
            print("led off")
            sleep(2)


def loop():
    GPIO.add_event_detect(inbutton, GPIO.FALLING, callback=zest(), bouncetime=1000)


if __name__ == '__main__':
    init()
    try:
        while True:
            loop()

    except KeyboardInterrupt:
        GPIO.output(outpin, 0)
        GPIO.cleanup()

Горит, светодиод мигает с интервалом в 1 секунду. но не отвечайте на нажатие кнопки. Эксперты, пожалуйста, посмотрите.

1 Ответ

0 голосов
/ 07 сентября 2018

Изменить эту строку:

GPIO.add_event_detect(inbutton, GPIO.FALLING, callback=zest(), bouncetime=1000)

к этому:

GPIO.add_event_detect(inbutton, GPIO.FALLING, callback=zest, bouncetime=1000)

При наличии, обратный вызов вызывается один раз при его регистрации, а зарегистрированный обратный вызов сохраняется как None, поскольку это то, что было возвращено zest().

Обратный вызов также должен принимать один аргумент: channel. Поэтому измените определение вашей функции на:

def zest(channel):
...