1

目標は、動作するシリアル ポートから読み取ることですが、これは RFID リーダーであるため、別の読み取りがバッファリングされる前にユーザーが間に合わない可能性があります。これにより、重複 (またはそれ以上) のエントリが発生します。したがって、バッファリングされたエントリをすべてクリアして、数秒間スリープ状態にする必要があります。

問題は、スリープ機能を実装して入力バッファをフラッシュする「ねじれた」方法は何ですか?

class ReaderProtocol(LineOnlyReceiver):

    def connectionMade(self):
        log.msg("Connected to serial port")

    def lineReceived(self, line):
        line = line.decode('utf-8')
        log.msg("%s" % str(line))
        time.sleep(2)  # pauses, but still prints whats in buffer

...
log.startLogging(sys.stdout)
serialPort = SerialPort(ReaderProtocol, "/dev/ttyAMA0", reactor, 2400)
reactor.run()

編集

これが実用的なソリューションです

class ReaderProtocol(LineOnlyReceiver):

    t, n = 0, 0

    def __init__(self):
        self.t = time.time()

    def connectionMade(self):
        log.msg("Connected to serial port")

    def lineReceived(self, line):
        self.n = time.time()
        if self.n > self.t + 2:
            line = line.decode('utf-8')
            log.msg("%s" % str(line))
            self.t = self.n

...
log.startLogging(sys.stdout)
serialPort = SerialPort(ReaderProtocol, "/dev/ttyAMA0", reactor, 2400)
reactor.run()
4

1 に答える 1