GPIOZero Pi Сигнализация: нужна альтернатива для задержки

Некоторые веб-приложения покажут, что вы устанавливаете экран при первом запуске, когда в базе данных нет пользователей. Вы можете ввести логин администратора, пароль и некоторые настройки, а после этого webapp переключится в обычный режим работы, и вы можете войти в систему как новый созданный пользователь и создать других пользователей.

0
задан Pang 15 March 2019 в 01:19
поделиться

1 ответ

Вам придется немного перестроить вещи, чтобы сделать это.

Идея заключается в том, что у вас есть пара глобальных переменных, которые обновляются обработчиками событий GPIOZero:

  • door_is_open - true, когда дверь открыта
  • [ 112] - подсчитывает количество секунд, в течение которых дверь была открыта (обработчики событий сбрасывают ее на ноль).

Существует также бесконечный основной цикл, который тикает один раз в секунду, который читает переменную door_is_open и увеличивает счетчик открытия ... и, наконец, если счетчик открытия достигает желаемого порога (5 секунд здесь, потому что мы ' нетерпеливые люди), он включает buzzer.

Обработчик door_closed заботится о сбросе buzzer, но это также может быть сделано в основном цикле.

Я также взял на себя смелость рефакторинга регистрации в свою собственную функцию, которая легко также печатает то же самое на консоли. (Кроме того, я бы предложил использовать форматирование даты ISO 8601, но я не хотел навязывать это здесь.)

Дальнейший рефакторинг может обернуть все это в аккуратный класс, чтобы избежать глобальных переменных. [ 1114]

(Это все в сухом коде, поэтому ваш пробег может отличаться, но идея должна работать. :))

import time
from gpiozero import Button, Buzzer


button = Button(21, pull_up=True)
buzzer = Buzzer(4)
door_is_open = False
door_open_counter = 0


def log_event(text):
    print(log_line)
    with open("log.txt", "a") as log_file:
        log_line = "%s | %s" % (time.strftime("%m-%d-%Y %X"), text)
        log_file.write(log_line + "\n")



def door_opened():
    global door_is_open
    global door_open_counter
    log_event("Opened")
    door_is_open = True
    door_open_counter = 0


def door_closed():
    global door_is_open
    global door_open_counter
    log_event("Closed")
    buzzer.off()
    door_is_open = False
    door_open_counter = 0


button.when_pressed = door_closed
button.when_released = door_opened

while True:
    time.sleep(1)
    if door_is_open:
        door_open_counter += 1
        if door_open_counter >= 5:
            buzzer.on()
0
ответ дан AKX 15 March 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: