Python rfid扫描中的错误标签

Python rfid扫描中的错误标签,python,raspberry-pi,nfc,rfid,Python,Raspberry Pi,Nfc,Rfid,我在用Python扫描树莓Pi上的rfid标签时得到了奇怪的结果。 我不是专业人士,所以也许你可以很容易地找出我的错误 这些标签基本上是可以识别的,但似乎我有一些循环。 例如,如果我交替使用tag1和tag2,我将得到类似tag1的两次,然后是tag2的两次。 中断触发器的数量是正确的,但它会随机显示tag1或tag2。似乎有某种缓冲区在新的中断触发器上提供旧id,但并不总是这样 谢谢&对不起,我的英语不好 import RPi.GPIO as GPIO import time import s

我在用Python扫描树莓Pi上的rfid标签时得到了奇怪的结果。 我不是专业人士,所以也许你可以很容易地找出我的错误

这些标签基本上是可以识别的,但似乎我有一些循环。 例如,如果我交替使用tag1和tag2,我将得到类似tag1的两次,然后是tag2的两次。 中断触发器的数量是正确的,但它会随机显示tag1或tag2。似乎有某种缓冲区在新的中断触发器上提供旧id,但并不总是这样

谢谢&对不起,我的英语不好

import RPi.GPIO as GPIO
import time
import serial
import MySQLdb
import sys
import os
from thread import start_new_thread

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
UART = serial.Serial("/dev/ttyAMA0", 9600)
UART.open()
success = 0


def cls():
    os.system(['clear', 'cls'][os.name == 'nt'])

cls()


def mysqlex(sqlquery):
    global success
    db = MySQLdb.connect(host="localhost", user="xxx", passwd="xxx", db="xxx")
    cur = db.cursor()
    try:
        cur.execute(sqlquery)
        db.commit()
        success = cur.fetchone()
        print success
    except:
        db.rollback()
        success = None
        print "no success"
    cur.close()
    db.close()


def led():
    GPIO.setup(18, GPIO.OUT)
    GPIO.setwarnings(False)
    GPIO.output(18, False)
    time.sleep(3)
    GPIO.output(18, True)


def interrupt(channel):
    start = "\x02"
    ende = "\x03"
    while True:
        ID = ""
        state = UART.read()
        if state == start:
            for Counter in range(13):
                zeichen = UART.read()
                ID += str(zeichen)
#            UART.flushInput()
            ID = ID.replace(start, "")
            ID = ID.replace(ende, "")
            print "ID -->", ID
            rfid = int(ID, 16)
            print "+********************************+"
            print rfid
            sql = "SELECT * FROM Rfid WHERE rfid_key = ('%s')" % rfid
            mysqlex(sql)
            if success is not None:
                start_new_thread(led, ())
                print "Zugang erlaubt                   +"
                print "+********************************+"
                print " "
                return
            else:
                print "Zugang verweigert                +"
                print "+********************************+"
                print " "
                return


GPIO.add_event_detect(24, GPIO.RISING, callback=interrupt, bouncetime=3000)


def main():
    while True:
        time.sleep(1)


if __name__ == '__main__':
    try:
        main()

    except KeyboardInterrupt:
        sys.exit()

    finally:
       GPIO.cleanup()
找到了答案

UART.flushInput()
以前

if state == start:

它就像一个符咒。

康华莱士,你好,你是谁?你有空吗?我是利伯斯坦·沃尔·米尔,美国国家足球俱乐部董事会是不是把学校列为GPIO的一部分。上升的信号,是不是有点像möglich?