Я работаю над проектом Arduino и связываю его со сценарием Python из-за ограничений памяти. На стороне Python у меня есть двухмерная матрица, содержащая соответствующие значения x, y для координат, и в этом списке 26000 пар координат. Итак, чтобы прояснить структуру данных для всех вас, pathlist [0] [0]
вернет значение X первой координаты моего списка. Выполнение различных операций и т. Д. Из этого списка в Python не вызывает проблем. Однако когда у меня возникают проблемы, я отправляю эти значения в Arduino по последовательному каналу, что полезно.
Из-за характера последовательной связи (по крайней мере, я думаю, что это так) я должен отправлять каждое целое число как строка, и только одна цифра за раз. Итак, число вроде 345 будет отправлено как 3 отдельных символа, из которых, конечно, будут 3, 4, затем 5.
Я борюсь с поиском способа восстановить эти целые числа на Arduino.
Всякий раз, когда я отправляю значение, он получает данные и выводит их так:
//Python is sending over the number '25'
2ÿÿ52
//Python is sending the number 431.
4ÿÿ321ÿÿÿ2
Код Arduino:
String str;
int ds = 4;
void setup() {
Serial.begin(9600);
}
void loop(){
if (Serial.available()>0) {
for (int i=0; i<4; i=i+1) {
char d= Serial.read();
str.concat(d);
}
char t[str.length()+1];
str.toCharArray(t, (sizeof(t)));
int intdata = atoi(t);
Serial.print(intdata);
}
}
А код Python выглядит так:
import serial
s = serial.Serial(port='/dev/tty.usbmodemfd131', baudrate=9600)
s.write(str(25))
Я почти уверен, что проблема не в происходит из метода вывода ( Serial.print
), видя, что когда я объявляю другой тип int, он отлично форматируется на выходе, поэтому я предполагаю, что проблема заключается в том, как сконструирована переменная intdata
.
Одно примечание, которое может помочь в диагностике этой проблемы, заключается в том, что если я изменю Serial.print (intdata)
на Serial.print (intdata + 5)
, мой результат будет 2ÿÿ57
, где я ожидал бы 30 (25 + 5 ). Эта 7 присутствует независимо от ввода. Например, я мог бы записать 271 в серийный номер, и мой результат выглядел бы следующим образом:
//For input 271.
2ÿÿ771ÿÿÿ7
Мне кажется, что Arduino разбивает значения на пары по два и добавляет длину в конец. Я не могу понять, почему это произошло.
Мне также кажется, что ÿ
добавляются в цикл for. Это означает, что они добавлены, потому что в данный момент ничего не отправляется. Но даже исправив это, добавив еще одно условное условие if (Serial.available ()> 0)
, результат все равно не будет рассматриваться как целое число.
Кроме того, будет использоваться Pickle подойдет здесь? Что я делаю не так?