Я пытаюсь кодировать следующее, используя python3 в raspberry pi:
1) ждать 14-значный штрих-код (сканер штрих-кода подключен через порт USB и ввод получен как данные клавиатуры)
2) после считывания штрих-кода дождитесь последовательной связи (устройство подключено к USB-порту и отправляет последовательные команды. Может быть одна или несколько ....), идея заключается в том, что все полученные команды будут связаны сотсканированный штрих-код
3) процесс ожидания последовательных команд должен быть остановлен при считывании нового штрих-кода. ЭТО ЧАСТЬ, КОТОРУЮ Я НЕ ПОЛУЧИЛ, КАК ЭТО СДЕЛАТЬ
После некоторых исследований я решил использовать библиотеку "readchar" для сканера штрих-кода и библиотеку "serial" для полученной последовательной связи. Они оба работают сами по себе, но проблема в том, что я пытаюсь обнаружить обе вещи одновременно.
В следующем коде мне удалось прочитать штрих-код, а затем подождать 5 строк последовательной связи, чтобы, наконец, повторить процесс и снова прочитать штрих-код. Программа работает как сейчас, НО проблема в том, что я не знаю, сколько линий последовательной связи я получу, поэтому мне нужно каким-то образом обнаружить новый штрих-код, ожидая при этом также получения последовательной связи.
import readchar
import time
import serial
ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 115200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
print("Waiting for barcode...")
while 1:
inputStr = ""
while len(inputStr) != 14: #detect only 14 digit barcodes
inputStr += str(readchar.readchar())
inputStr = ''.join(e for e in inputStr if e.isalnum()) #had to add this to strip non alphanumeric characters
currentCode = inputStr
inputStr = ""
print(currentCode)
ser.flushInput()
time.sleep(.1)
# Wait for 5 lines of serial communication
# BUT it should break the while loop when a new barcode is read!
count = 0
while count < 5:
dataRead=ser.readline()
if len(dataRead) > 0:
print(dataRead)
count+=1
print("Waiting for barcode...")
Если я добавлю условие в цикл while для чтения последовательной связи с использованием (ser.readline ()), чтобы при чтении символа со сканера (readchar.readchar ()) оновсе портит. Это как если readline и Reherher не могут быть в одном цикле while.
Проводя некоторые исследования, я думаю, что мне нужно использовать асинхронный ввод-вывод, или потоки, или что-то в этом роде, но я понятия не имею. Также я не знаю, смогу ли я продолжать использовать одни и те же библиотеки (serial и readchar). Пожалуйста, помогите