python串口通讯数据过长_python

我正在研究一个Arduino项目,由于内存限制,我正在将它与Python脚本连接起来。 在Python方面,我有一个2维矩阵,包含坐标的各个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会不合适? 我究竟做错了什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值