Так что мне нужен оператор if, в котором сканируется карта NF C (Near Field Communication) или нажимается кнопка. Проблема в том, что когда я устал, все просто с if read.checkNFC() == 1 or button.getButtonPressed() == 0
, а не только с NF C, а кнопка полностью игнорируется.
После небольшого поиска я нашел это Завершатся ли разные темы в то же время, что и первый, который завершает sh? , хотя он будет работать хорошо, не та же проблема, но отличается теперь только кнопка работает и NF C работает только иногда, но тогда вся программа отстает какая-то причина.
Код NF C Код
#!/usr/bin/env python
import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
reader = SimpleMFRC522()
def gettext():
id, text = reader.read()
return text
def checkNFC():
righttext = "Alohomora"
testtext = gettext()
if testtext.strip() == righttext:
return 1
else:
return 0
Код кнопки
#!/usr/bin/env python
import RPi.GPIO as GPIO
buttonPin = 12
def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def getButtonPressed():
while GPIO.input(buttonPin)==GPIO.HIGH:
continue
else:
return 0
Я фактически уже отказался и сбросил код на единственную NF C форма, поэтому у меня нет той, где я пробовал ее с очередью, но это было что-то вроде
#!/usr/bin/env python
import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
reader = SimpleMFRC522()
def gettext():
id, text = reader.read()
return text
def checkNFC(worker_queue, stop_event):
while not stop_event.is_set():
righttext = "Alohomora"
testtext = gettext()
if not stop_event.is_set():
if testtext.strip() == righttext:
worker_queue.put(1)
else:
worker_queue.put(0)
#!/usr/bin/env python
import RPi.GPIO as GPIO
buttonPin = 12
def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def getButtonPressed(worker_queue, stop_event):
while not stop_event.is_set():
while GPIO.input(buttonPin)==GPIO.HIGH:
continue
else:
if not stop_event.is_set():
worker_queue.put(2)
#!/usr/bin/env python
[...]
worker_queue = Queue.Queue()
stop_event = threading.Event()
threads = []
threads.append(threading.Thread(target=read.checkNFC, args=(worker_queue, stop_event)))
threads.append(threading.Thread(target=button.getButtonPressed, args=(worker_queue, stop_event)))
for thread in threads:
thread.start()
first_finished = worker_queue.get()
stop_event.set()
if first_finished == 0:
[...]
elif first_finished == 1:
[...]
elif first_finished == 2:
[...]
Должно было быть что-то подобное