Variable Corruption
-
Hello all, fairly new to M5, but have done embedded stuff for a while. I built this using UIFlow2, but also pasting the code below for those who prefer to see it in code.
I have 3 RFID readers hanging off a PAHub. I'm getting the RFID UIDs off the readers and storing them in a variable in the Loop. All good so far. I write them to variables RFIDZERO, RFIDONE and RFIDTWO (I was using other names, but thought it might have been getting confused with the other variable names).
Inside the do loops, RFIDZERO and RFIDONE get set to their correct values from the RFID tags. Immediately outside the do loop, I print them again and now, RFIDONE is equal to RFIDZERO's value. No other assignment operators or operation has taken place. WTF?
import M5 from M5 import * from module import Module4In8Out from hardware import I2C from hardware import Pin from unit import PAHUBUnit from unit import RFIDUnit module_4in8out_0 = None i2c0 = None file_0 = None pahub_0 = None rfid_0 = None rfid_1 = None rfid_2 = None RFIDZERO = None WritingRFIDs = None RFIDONE = None RFIDTWO = None def btnA_wasClicked_event(state): global module_4in8out_0, i2c0, file_0, pahub_0, rfid_0, rfid_1, rfid_2, RFIDZERO, WritingRFIDs, RFIDONE, RFIDTWO WritingRFIDs = True def setup(): global module_4in8out_0, i2c0, file_0, pahub_0, rfid_0, rfid_1, rfid_2, RFIDZERO, WritingRFIDs, RFIDONE, RFIDTWO M5.begin() Widgets.fillScreen(0x222222) BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btnA_wasClicked_event) module_4in8out_0 = Module4In8Out(address=0x45) i2c0 = I2C(0, scl=Pin(33), sda=Pin(32), freq=100000) pahub_0 = PAHUBUnit(i2c=i2c0, channel=0) rfid_2 = RFIDUnit(PAHUBUnit(i2c=i2c0, channel=2)) rfid_1 = RFIDUnit(PAHUBUnit(i2c=i2c0, channel=1)) rfid_0 = RFIDUnit(PAHUBUnit(i2c=i2c0, channel=0)) WritingRFIDs = False def loop(): global module_4in8out_0, i2c0, file_0, pahub_0, rfid_0, rfid_1, rfid_2, RFIDZERO, WritingRFIDs, RFIDONE, RFIDTWO M5.update() if not WritingRFIDs: if rfid_0.is_new_card_present(): RFIDZERO = rfid_0.read_card_uid() print((str('RFID_0: ') + str(RFIDZERO))) rfid_0.close() if rfid_1.is_new_card_present(): RFIDONE = rfid_1.read_card_uid() print((str('RFID_1: ') + str(RFIDONE))) rfid_1.close() if rfid_2.is_new_card_present(): RFIDTWO = rfid_2.read_card_uid() print((str('RFID_2: ') + str(RFIDTWO))) rfid_2.close() print((str('RFID_0: ') + str(RFIDZERO))) print((str('RFID_1: ') + str(RFIDONE))) print((str('RFID_2: ') + str(RFIDTWO))) else: file_0 = open('/flash/rfidtags.txt', 'w') file_0.write(RFIDZERO) file_0.write('\r\n') file_0.write(RFIDONE) file_0.close() WritingRFIDs = False print('Wrote the file') if __name__ == '__main__': try: setup() while True: loop() except (Exception, KeyboardInterrupt) as e: try: from utility import print_error_msg print_error_msg(e) except ImportError: print("please update to latest firmware")