from mfrc522 import SimpleMFRC522 import time from machine import Pin # Define GPIO pins for the LEDs RED = Pin(2, Pin.OUT) AMBER = Pin(6, Pin.OUT) GREEN = Pin(10, Pin.OUT) # Put them in an array lights = [RED, AMBER, GREEN] # Set the GPIO pins being used reader = SimpleMFRC522(spi_id=0,sck=18,miso=16,mosi=19,cs=17,rst=9) # Function to turn off all LEDs def all_off(): for light in lights: light.off() # Read the RFID card/tag/sticker def read(): print("Reading...Please place the card...") # print a message telling the user to tap the card. id, text = reader.read() # read in two fields from the tag, id and text. print("ID: %s\nText: %s" % (id,text)) # print the result in Thonny # return id, text return text.strip() # this returns the contents of 'text' to the calling code, but strips off any crap like spaces. # Even if the tag is short (red) you still get 16 chars back from the read, so we need to strip of what is not required. # Call function 'all_off' to turn off all LEDs all_off() # Start a loop (forever) while True: tag = read() #c all the function def read() and store the result in the varable tag print ("the scanned colour is =", tag) #print the contents of the variable tag # Ched the read tag colour, turn off all LEDs then turn on the corresponding one. If no tags match, nothing happens. if tag == "RED": all_off() RED.on() elif tag == "AMBER": all_off() AMBER.on() elif tag == "GREEN": all_off() GREEN.on() time.sleep(1) # The delay is to stop the tag being read multiple times per second.