在 Python 中 X 秒后超时



我正在用python编写一个程序,它的工作原理是这样的:

  1. 通过串行端口获取输入字符串,当按回车(回车返回)
  2. 检查$符号是否作为输入字符串的第一个字符存在,然后继续

问题

如果我没有得到Carriage Return CR并在同一时间或特定时间间隔后获得另一个字符串,这可能会很麻烦。为了避免这个问题,我想添加超时会话,如果未收到回车,则在特定时间间隔后Null以前的缓冲区。

请查看下面的代码并指导我如何在其中添加超时选项?

法典

import serial
x = [0,0,0]
ser = serial.Serial('/dev/ttyAMA0', 9600)
buffer = ''
while True:
    buffer += ser.read(ser.inWaiting())
    if 'n' in buffer:
        if buffer[0] == '$':
            x1 = buffer.rstrip()
            x2= x1.split(",")
            print((x2[0]),(x2[1]),(x2[2]))
        buffer = ""

我认为您只需要在程序末尾添加此行即可。每次输入正确的字符串时,此行将添加更多 60 秒

clear_buffer = time.time() + 60

查看下面的编码

import serial
import time
x = [0,0,0]
ser = serial.Serial('/dev/ttyAMA0', 9600)
buffer = ''
clear_buffer = time.time() + 60
while True:
    if time.time() >= clear_buffer:
        buffer = ''
        clear_buffer = time.time() + 60
    buffer += ser.read(ser.inWaiting())
    if 'n' in buffer:
        if buffer[0] == '$':
            x1 = buffer.rstrip()
            x2= x1.split(",")
            print((x2[0]),(x2[1]),(x2[2]))
        buffer = ""
        clear_buffer = time.time() + 60

我可能读错了你的问题,但看起来你只是想在设定的时间后清除缓冲区字符串? 这将每 60 秒清除一次:

import serial
import time
x = [0,0,0]
ser = serial.Serial('/dev/ttyAMA0', 9600)
buffer = ''
clear_buffer = time.time() + 60
while True:
    if time.time() >= clear_buffer:
        buffer = ''
        clear_buffer = time.time() + 60
    buffer += ser.read(ser.inWaiting())
    if 'n' in buffer:
        if buffer[0] == '$':
            x1 = buffer.rstrip()
            x2= x1.split(",")
            print((x2[0]),(x2[1]),(x2[2]))
        buffer = ""

相关内容

  • 没有找到相关文章

最新更新