Hallo allemaal,
ik ben aan het spelen met de pi (eigenaar van een B+), het breadboard en wat ledjes en resistors (had een starterspack besteld zonder jumper cables, zo beginner ben ik...). Maar die zijn als het goed is inmiddels onderweg. Dus snel wat spelen omdat ik niet kan wachten:
Nu ben ik beginner met python en wil ik dingen beter begrijpen. Ik heb een stoplichtprogrammatje geschreven. Grappig feitje, hij is iets anders omdat ik in Slovenië woon. In Slovenië heb je prima race stoplichten omdat ze na rood eerst oranje worden voor ze groen worden.

Haha.
*op de een of andere manier staan er vreemde indents in de loop hieronder, bij mij staat alles hetzelfde indented*
Dit is mijn code voor de Duo traffic light.
Python: DuoTraffic.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
#leftsidenumbering board pins
redL=26
yellowL=24
greenL=23
#rightsidenumbering board pins
redR=11
yellowR=12
greenR=13
#Activeren van GPIO pins
GPIO.setup(redL,GPIO.OUT)
GPIO.setup(yellowL,GPIO.OUT)
GPIO.setup(greenL,GPIO.OUT)
GPIO.setup(redR,GPIO.OUT)
GPIO.setup(yellowR,GPIO.OUT)
GPIO.setup(greenR,GPIO.OUT)
sequences = int(input("How many traffic light sequences do you wish to see?"))
for i in range(sequences):
GPIO.output(redL,True)
GPIO.output(greenR,True)
time.sleep(5)
GPIO.output(redL,False)
GPIO.output(yellowL,True)
GPIO.output(greenR,False)
GPIO.output(yellowR,True)
time.sleep(.5)
GPIO.output(yellowL,False)
GPIO.output(greenL,True)
GPIO.output(yellowR,False)
GPIO.output(redR,True)
time.sleep(3)
GPIO.output(greenL,False)
GPIO.output(yellowL,True)
GPIO.output(redR,False)
GPIO.output(yellowR,True)
time.sleep(1)
GPIO.output(yellowL,False)
GPIO.output(redL,True)
GPIO.output(yellowR,False)
GPIO.output(greenR,True)
GPIO.cleanup() |
Maar als ik nou bijvoorbeeld 50 sequences wil zien, en dat het programma onderbreek met ctrl + c (via putty remote control) blijven er altijd 2 ledjes branden. Logisch, want de in de loop branden er altijd 2. Maar hoe kan ik de code efficienter schrijven dat als ik het onderbreek de ledjes uitgaan. Ik zat zelf te denken aan een loop in mijn " for i in range(sequences):" dat als het programma wordt onderbroken alle LEDS op False moeten. Tijdens het stellen van de vraag op het antwoord gekomen, dus zal het toch nog even posten omdat ik nu daar weer een vraagje over heb.
Opgelost door de module atexit te gebruiken. Ik heb deze functie gedefinieerd:
def CleanExit():
print("You have cancelled the awesome sequence")
GPIO.cleanup()
en eerste regel in mijn loop is nu:
atexit.register(CleanExit)
Waarom print hij de tekst 2 keer iedere keer dat ik het afsluit? Ben ik te traag met indrukken dat ik de toetsen te lang ingedrukt hou? Hoe kan ik dit bijv voorkomen??
Sorry voor deze clownspost..