Har precis fått upp ögonen för programmering och programmerat lite python på senaste tiden.
Mitt första projekt är att göra en suppersimpelt kodlås med 4 knappar kopplade till GPIO på raspberry pi.
Jag har en variabel som jag sätter vid uppstart av filen:
fail1 = False
funktionen failed_one() skall ändra fail1 till fail1 = True, detta är i sin tur villkoren för att nästa misslyckade kod ska generera fail2 = True.
Problemet är att efter att den kört failed_one() så är fail1 = False fortfarande.
Vad är det jag missförstår här?
Mitt första projekt är att göra en suppersimpelt kodlås med 4 knappar kopplade till GPIO på raspberry pi.
Jag har en variabel som jag sätter vid uppstart av filen:
fail1 = False
funktionen failed_one() skall ändra fail1 till fail1 = True, detta är i sin tur villkoren för att nästa misslyckade kod ska generera fail2 = True.
Problemet är att efter att den kört failed_one() så är fail1 = False fortfarande.
Vad är det jag missförstår här?
Kod:
#import libraries import RPi.GPIO as GPIO import time #GPIO Basic initialization GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) #LCD from lcd_api import LcdApi from i2c_lcd import I2cLcd I2C_ADDR = 0x27 I2C_NUM_ROWS = 4 I2C_NUM_COLS = 20 lcd = I2cLcd(1, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS) led1 = 21 led2 = 20 led3 = 16 led4 = 12 button1 = 26 button2 = 19 button3 = 13 button4 = 6 #Initialize your pin GPIO.setup(led1,GPIO.OUT) GPIO.setup(led2,GPIO.OUT) GPIO.setup(led3,GPIO.OUT) GPIO.setup(led4,GPIO.OUT) GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) digit0=False digit1=False digit2=False digit3=False digit4=False button1=False button2=False button3=False button4=False fail1=False print("debug1") fail2=False GPIO.output(led1,0) GPIO.output(led2,0) GPIO.output(led3,0) GPIO.output(led4,0) code=dict([(26,0),(19,0),(13,0),(6,0)]) print(code) validcode=[26,19,13,6] lcd.clear() lcd.move_to(0,0) lcd.putstr("Enter Code") clickedbuttons=[] def correct(): GPIO.output(led1,1) GPIO.output(led2,0) GPIO.output(led3,0) GPIO.output(led4,0) fail1 = False print("debug2") fail2 = False clickedbuttons.clear() lcd.clear() lcd.move_to(0,0) lcd.putstr("Correct") print("Correct") time.sleep(5) GPIO.output(led1,0) lcd.clear() lcd.move_to(0,0) lcd.putstr("Enter Code") def failed_one(): print("incorrect1") lcd.clear() lcd.move_to(0,0) lcd.putstr("Fail 1/3") GPIO.output(led2,1) clickedbuttons.clear() fail1 = True print(fail1) def failed_two(): print("incorrect2") lcd.clear() lcd.move_to(0,0) lcd.putstr("Fail 2/3") GPIO.output(led3,1) clickedbuttons.clear() fail2 = True def failed_three(): print("incorrect3") lcd.clear() lcd.move_to(0,0) lcd.putstr("Fail 3/3") lcd.move_to(1,0) lcd.putstr("5 min timeout") GPIO.output(led4,1) clickedbuttons.clear() time.sleep(10) fail1 = False print("debug3") fail2 = False #FIRST ATTEMPT while True: print(fail1) for key in code: if GPIO.input(key) and code[key] == 0: clickedbuttons.append(key) code.update({key:1}) time.sleep(0.2) elif code[key] == 1 and GPIO.input(key) == 0: code.update({key:0}) if len(clickedbuttons) == 4: print(clickedbuttons) if validcode == clickedbuttons: correct() else: if fail1 == False and fail2 == False: failed_one() elif fail1 == True and fail2 == False: failed_two() elif fail1 == True and fail2 == True: failed_three()