Python,serial readline,执行一次,即使输入是成倍的

2024-05-12 23:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

不用说我是个初学者,我正在编写一个工具,它从树莓派读取serial/dev/ttyAMA0(忍者皮外壳),当收到特定的433Mhz代码时执行函数。在

所以我得到了这个门传感器,每次被触发时都会发送代码“0101110111010000”,我能够捕捉到事件并触发一个函数,它向我发送一个pushover通知。在

门传感器发送信号4-5次,以确保接收器捕捉到信息,所以我的循环执行了几次,问题来了,我不想每次门打开时都收到4/5的通知,所以我尝试了计数器+1选项,它工作正常,但我不知道如何在一段特定的时间后重置计数器我要在触发一次后关闭通知至少5分钟。在

我试图在第一次读取后刷新串行缓冲区输入,我也尝试过关闭/重新打开串行连接,但没有运气,因为它会再次找到相同的代码并再次触发我的函数,有什么提示吗?在

import serial
from chump import Application
from time import sleep

serialport = serial.Serial(
        port='/dev/ttyAMA0',
        baudrate=9600,
        parity=serial.PARITY_ODD,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.SEVENBITS,
        timeout=6
)

door = "010111010111011101010000"

def door_open():
        message = user.create_message(
        title='House Notification',
        message="<b>Door Opened</b>",
        html=True
        )
        message.send()
        serialport.close()
        sleep(5)
        serialport.open()

while True:
    command = serialport.readline()
    print str(command) # just debugging
    if door in command:
        serialport.flushInput()
        door_open()
        sleep(10)

这是我正在使用的代码,刚刚删除了pushover api变量。 谢谢你的任何暗示。在

编辑:已解决!在

将源更改为:

^{pr2}$

现在,即使代码从发送器发送了5次,它也只会得到一次并触发函数。 谢谢你的帮助


Tags: 函数代码devimportmessageserial计数器sleep