Мой python код, похоже, не получает первую строку последовательных данных от моего Arduino. С помощью тех же команд, посылаемых через последовательный монитор Arduino, я могу вывести на экран все те же точки данных в правильном порядке. Но когда я переключаюсь на python, я могу получить все данные, кроме самой первой строки. В качестве временного решения я сейчас отправляю исходную первую строку данных в качестве последней строки данных из arduino на python. Мой код python может читать эти отсутствующие данные, если они не являются лидирующей строкой. Это странно. Вот фрагмент кода python, который обрабатывает последовательный обмен:
def get_data(messageHeader, val):
"""sends and receives arduino data
Arguments:
messageHeader {str} -- determines which command to upload
val {str} -- value of input data to upload
"""
header = str(messageHeader)
value = str(val)
if header == "a":
command = "<" + header + ", " + value + ">"
print(command)
ser.write(command.encode())
if ser.readline():
time.sleep(0.5)
for x in range(0, numPoints):
data = ser.readline().decode('ascii')
dataList[x] = data.strip('\r\n')
print("AU: " + str(x) + ": " + dataList[x])
print(dataList)
else:
print("Invalid Command")
Я посылаю команду «a» через мой терминал python, когда я хочу получить последовательные данные из arduino, потому что это соответствует временной команде, встроенной в код arudino.
Вот некоторые из кодов Arduino:
void loop()
{
recvWithStartEndMarkers();
checkForSerialMessage();
}
void checkForSerialMessage()
{
if (newData == true)
{
strcpy(tempBytes, receivedBytes);
// this temporary copy is necessary to protect the original data
// because strtok() replaces the commas with \0
parseData();
showParsedData();
newData = false;
if (messageFromPC[0] == 'a')
{
ledState = !ledState;
bitWrite(PORTB, 7, ledState);
for(int i = 0; i < 6; i++)
{
Serial.println(threshold_longVals[i]);
}
for(int i = 0; i < 9; i++)
{
Serial.println(threshold_intVals[i]);
}
Serial.println(threshold_floatVal);
Serial.println(threshold_longVals[0]);
}
}
}
Когда через последовательный монитор Arduino отправляется «a», я получаю все threshold_long / int / floatVals в правильном порядке. Вы заметите, что в нижней части кода Arduino я снова добавил дополнительную строку для печати threshold_longVals [0], потому что по неизвестной мне причине данные, напечатанные на экране со стороны python, начинаются с threshold_longVals [1] , Я изо всех сил пытаюсь понять, почему это не начинается с threshold_longVals [0]?
Спасибо.