Имитация «нажатой кнопки» подъема события в gpiozero - PullRequest
2 голосов
/ 08 октября 2019

Я пытаюсь разработать некоторый код на машине без GPIO. В качестве библиотеки GPIO я выбрал gpiozero, чтобы иметь возможность писать свой код без доступа к gpio из raspberry pi. Моя проблема, я не могу получить событие .when_pressed в коде. Я имитирую изменение состояния кнопки, но функция не вызывается.

Device.pin_factory = MockFactory()

def interrupt_Event(channel):
   print("%s puted in the queue", channel)

InputPin.Device.pin_factory.pin(channel)
InputPin.when_pressed  = interrupt_Event

def main():
   try:
        while True:

            time.sleep(1)
                    InputPins[channel].pull=drive_high()
                    time.sleep(0.1) 
                    print("State CHANNEL %s" % channel)
                    print(InputPins[channel].state)
                    InputPins[channel].drive_low()

До сих пор я понятия не имею, что не так.

1 Ответ

1 голос
/ 12 октября 2019
Функция

when_pressed не должна иметь аргументов (см. 2.7 в https://gpiozero.readthedocs.io/en/stable/recipes.html).

Вы можете определить обратный вызов, используя цикл: Создание функций в цикле (используйте channel = channelпринудительное раннее связывание значения канала, как в примере ниже)

for channel in channels:
    def onpress(channel=channel):
        print("%s puted in the queue", channel)
    InputPins[channel].when_pressed = onpress
...