pySerial的神秘行为

时间:2016-04-16 19:04:00

标签: python python-3.x arduino pyserial

我遇到了以下问题:

我这里有一个Arduino连接到我的Mac。 Arduino正在读取并响应串行数据。 我做了一个小python3脚本,它接受用户输入和使用 pySerial将命令如'set(13,255)〜'写入Arduino。 这只是工作正常:

while 1:

cmd = input("<<< ")
cmd += '~'

if cmd != "~":
    serialPort.write(cmd.encode())

    output = str(serialPort.readline()).upper()[2:-5]

    if output != " ":
        print(">>> ", output)

以下是问题:

如果我想在脚本中发送一些“自动”命令,例如在一个循环中,Arduino不再响应,即使命令发送也是如此 相同,也编码和类型“字节”。

for i in range[0, 256]:

    cmd = 'set(13, '
    cmd += str(i)
    cmd += ')~'

    serialPort.write(cmd.encode())

    time.sleep(0.1)

奇怪的是,如果我首先声明变量(cmd)作为输入,它也工作正常,但这意味着每次发送命令时都会手动中断。

cmd = input()

cmd = 'set(13, '
cmd += str(i)
cmd += ')~'

经过几个小时的研究后,我完全不知道问题可能是什么。正如我所说,数据类型在编码后总是字节。

2 个答案:

答案 0 :(得分:0)

我不知道PySerial,但我怀疑是因为写调用不会立即发送数据。

当您使用输入时,它会向缓冲区添加换行符,这可能会触发写入调用以自动刷新。

在你拥有的另一段代码中,你不会在缓冲区足够大之前向缓冲区添加换行符并且不会刷新数据。 因此,通过flush()调用,它应该强制发送它。

希望它有意义

答案 1 :(得分:0)

好吧,我必须在连接到端口后进行更长时间的中断。 (因为到目前为止我不得不提供一些输入,所以不是问题)