Последовательная связь Python

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

9
задан Micke 8 October 2015 в 09:14
поделиться