我遇到了以下问题:
我这里有一个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 += ')~'
经过几个小时的研究后,我完全不知道问题可能是什么。正如我所说,数据类型在编码后总是字节。
答案 0 :(得分:0)
我不知道PySerial,但我怀疑是因为写调用不会立即发送数据。
当您使用输入时,它会向缓冲区添加换行符,这可能会触发写入调用以自动刷新。
在你拥有的另一段代码中,你不会在缓冲区足够大之前向缓冲区添加换行符并且不会刷新数据。 因此,通过flush()调用,它应该强制发送它。
希望它有意义
答案 1 :(得分:0)
好吧,我必须在连接到端口后进行更长时间的中断。 (因为到目前为止我不得不提供一些输入,所以不是问题)