我正在开发一个Arduino项目,并且由于内存限制,我将它与Python脚本连接起来。在Python方面,我有一个2维矩阵,它包含坐标各自的x,y值,并且在这个列表中有26000个坐标对。因此,为了澄清你们所有人的数据结构,pathlist[0][0]
将返回我列表的第一个坐标的X值。在Python这个列表中执行不同的操作等没有任何问题。然而,我遇到麻烦的地方是,通过串行方式将这些值发送给Arduino,这种方式非常有用。Python串行通信
由于串行通信的性质(至少我认为是这种情况),我必须将每个整数作为一个字符串发送,并且一次只发送一个数字。所以,像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在这里适合吗? 我在做什么错?
这是为什么标签'java'? – NPE 2011-05-18 17:07:45
@aix嗯,我认为Arduino是基于Java的,因此Java的知识将适用于它。如果我错了,我很乐意改变它:D – danem 2011-05-18 17:12:21
这只是恰好是用Java编写的Arduino IDE。你在Arduino上运行的代码是C语言,所以Java与这个问题无关。 – NPE 2011-05-18 17:15:27