Python pySerial的神秘行为
我遇到了以下问题: 我这里有一个Arduino连接到我的Mac。 Arduino正在读取和响应串行数据。 我制作了一个小python3脚本,它接受用户输入并使用 pySerial将类似“set(13255)~”的命令写入Arduino。 这很好:Python pySerial的神秘行为,python,python-3.x,arduino,pyserial,Python,Python 3.x,Arduino,Pyserial,我遇到了以下问题: 我这里有一个Arduino连接到我的Mac。 Arduino正在读取和响应串行数据。 我制作了一个小python3脚本,它接受用户输入并使用 pySerial将类似“set(13255)~”的命令写入Arduino。 这很好: while 1: cmd = input("<<< ") cmd += '~' if cmd != "~": serialPort.write(cmd.encode()) output = str(serialP
while 1:
cmd = input("<<< ")
cmd += '~'
if cmd != "~":
serialPort.write(cmd.encode())
output = str(serialPort.readline()).upper()[2:-5]
if output != " ":
print(">>> ", output)
奇怪的是,如果我首先声明变量(cmd)作为输入,它也可以正常工作,但这意味着每次发送命令时都会手动中断
cmd = input()
cmd = 'set(13, '
cmd += str(i)
cmd += ')~'
经过几个小时的研究,我完全不知道问题出在哪里。正如我所说,数据类型在编码后总是字节。我不知道PySerial,但我怀疑这是因为写调用没有立即发送数据 当您使用输入时,它会向缓冲区添加一个换行符,这可能会触发写调用自动刷新 在另一段代码中,在缓冲区足够大之前,不向缓冲区添加换行符,也不会刷新数据。 因此,对于flush()调用,它应该强制发送它
希望它有意义好吧,我只是在连接到端口后不得不进行更长时间的中断。
(由于到目前为止我必须提供一些输入,所以这不是一个问题)尝试在写入Callu后添加一个serialPort.flush。很不幸,这不起作用。
cmd = input()
cmd = 'set(13, '
cmd += str(i)
cmd += ')~'