Я работаю над проектом 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 ?Что я делаю не так?