#python #raspberry-pi3 #gpiozero
#python #raspberry-pi3 #gpiozero
Вопрос:
Мне нужно запустить реле нажатием кнопки и дождаться сигнала, а затем отпустить реле. В приведенном ниже примере кода этот сигнал равен b2. Я новичок в Python и Pi, но получаю удовольствие! 🙂
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
from gpiozero import Button
from signal import pause
import time
def first_button():
print("First Pressed")
while True: #do stuff...
time.sleep(1)
print("waiting...")
def second_button():
print("Second Pressed")
b1 = Button(23)
b1.when_pressed = first_button
b2 = Button(24)
b2.when_pressed = second_button
pause()
Как мне определить нажатие кнопки, когда существующая функция, вызываемая кнопкой, все еще запущена?
Ответ №1:
В этом решении вы только включаете и выключаете вывод
from gpiozero import Button
from signal import pause
import time
pin = #Set a pin
r = LED(pin)
b1 = Button(23)
b1.when_pressed = r.on
b2 = Button(24)
b2.when_pressed = r.off
pause()
Здесь запускается поток для выполнения чего-либо:
from gpiozero import Button
from signal import pause
import time
import _thread
run = False
def do_stuff():
while run: #do stuff...
time.sleep(1)
print("waiting...")
def first_button():
global run
print("First Pressed")
run = True
_thread.start_new_thread(do_stuff)
def second_button():
global run
print("Second Pressed")
run = False
b1 = Button(23)
b1.when_pressed = first_button
b2 = Button(24)
b2.when_pressed = second_button
pause()
Комментарии:
1. Это имеет смысл, хотя кажется, что _thread был заменен модулем потоков, поэтому мне нужно будет изменить код для его запуска. «Ошибка импорта: нет модуля с именем _thread»
2. Какую версию вы используете? До версии 3.7 это был необязательный модуль docs.python.org/3/library/_thread.html