Если предложение с двумя вариантами выполнения (NF C или нажатие кнопки) - PullRequest
0 голосов
/ 26 апреля 2020

Так что мне нужен оператор 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:
   [...]

Должно было быть что-то подобное

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...