Python читает сериал из Arduino и пропускает первую строку чтения - PullRequest
0 голосов
/ 12 января 2019

У меня есть Arduino, подключенный к Raspberry Pi, и я получаю данные из Arduino, используя python и serial. У меня есть 6 датчиков, подключенных к Arduino, но когда я печатаю данные с пи, в первой строке всегда 2 или 3 датчика, после чего распечатываются все 6 датчиков. Как мне пропустить первую строку, читаемую поверх серийного номера?

Мой вывод выглядит так:

0 2 3
2 4 6 7 8 54
2 3 5 65 7 7
2 3 4 5 6 7

В первой строке всегда меньше 6 датчиков, а значения поступают из массива. Так что, если бы я получил доступ к arr[4], это было бы за пределами.

Вот код Python. Я пытаюсь сделать это без использования цикла while, я буду создавать другую функцию, которая периодически вызывает sensorVals() для обновления значений датчика. Я знаю, что могу использовать цикл, проверить длину массива, равную 6, а затем распечатать.

import serial
datetime.datetime.now()
ser=serial.Serial('/dev/ttyACM0',115200)
def sensorVals():
    while True:
        read_serial=ser.readline()
        val= read_serial.decode()
        val =val.strip()
        row = [x for x in val.split(' ')]
        if len(row) == 6:
            sensor1 = row[0]
            sensor2 = row[1]
            sensor3 = row[2]
            sensor4 = row[3]
            sensor5 = row[4]
            sensor6 = row[5]
            print (sensor4)
sensorVals()

1 Ответ

0 голосов
/ 14 января 2019

Вот способ без цикла, если вы уверены, что только одна строка будет иметь длину даже 4 значения:

# These lines moved to a new function so we avoid duplication
def readOneSensorLine():
    read_serial=ser.readline()
    val = read_serial.decode()
    val = val.strip()
    return val.split(' ') # You shouldn't need the list comprehension here

def sensorVals():
    row = readOneSensorLine()
    if len(row) == 4:
        # This row is short, so read again
        row = readOneSensorLine()

    return row #or print it, or whatever else needs to be done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...