首页 文章

pySerial的神秘行为

提问于
浏览
0

我遇到了以下问题:

我这里有一个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不再响应,即使发送的命令是相同的,也是编码的并且类型为“byte” .

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

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

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

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

    希望它有意义

  • 0

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

相关问题