我遇到了以下问题:
我这里有一个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 回答
我不知道PySerial,但我怀疑这是因为写调用不会立即发送数据 .
当您使用输入时,它将向缓冲区添加换行符,这可能会触发写入调用以自动刷新 .
在你拥有的另一段代码中,你不会在缓冲区足够大之前向缓冲区添加换行符并且不会刷新数据 . 所以使用flush()调用它应该强制发送它 .
希望它有意义
好吧,我只需要在连接到端口后进行更长的中断 . (因为到目前为止我不得不提供一些输入,所以不是问题)