Instructions

33
12. Tag
Heute im Adventskalender
•1 GPIO-Verbindungskabel
Der Schaltungsaufbau ist der gleiche wie an den letzten Tagen.
Countdown bis Weihnachten
Das Programm des 12. Tags zeigt auf der Sieben-Segment-Anzeige an, wie viele Tage es noch bis Weihnachten sind.
Das Programm
Das Programm 12countdown.py verwendet ein paar neue Python-Elemente zur Datumsberechnung.
#!/usr/bin/python
import RPi.GPIO as GPIO
import time, datetime
GPIO.setmode(GPIO.BCM)
seg={'a':21, 'b':8, 'c':11, 'd':26, 'e':19, 'f':20,
'g':13}
for s in "abcdefg":
GPIO.setup(seg[s], GPIO.OUT, initial=0)
zif=[16, 12, 7, 6]
for z in zif:
GPIO.setup(z, GPIO.OUT, initial=1)
zahl=[
"abcdef", #0
"bc", #1
"abdeg", #2
"abcdg", #3
"bcfg", #4
"acdfg", #5
"acdefg", #6
"abc", #7
"abcdefg", #8
"abcdfg", #9
]
z=[0,0,0,0]
t=datetime.date(2019, 12, 24) - datetime.date.today()
z[0]=int(t.days/1000)
z[1]=int(t.days%1000/100)
z[2]=int(t.days%100/10)
z[3]=int(t.days%10)
print(z)
print("Strg+C beendet das Programm")
try:
while True:
for i in range(4):
for s in "abcdefg":
GPIO.output(seg[s], 0)
GPIO.output(zif[i], 0)
for s in zahl[z[i]]:
GPIO.output(seg[s], 1)
time.sleep(0.001)
GPIO.output(zif[i], 1)
except KeyboardInterrupt:
GPIO.cleanup()
So funktioniert es
Die Initialisierung der GPIO-Pins und die Liste zur Darstellung der Ziffern auf den sieben Segmenten der Anzeige werden aus dem letzten Pro-
gramm übernommen.
import time, datetime
Am Anfang wird zusätzlich die Bibliothek datetime für Datumsberechnungen importiert.
t=datetime.date(2019, 12, 24) - datetime.date.today()
Die Funktion datetime.date() erzeugt ein Datumsobjekt mit einem bestimmten Datum. Diese Zeile errechnet die Differenz zweier Datumsob-
jekte, den Zeitraum zwischen dem 24.12.2019 und dem heutigen Tag. Das Objekt mit dem Ergebnis wird in der Variable t gespeichert.
z[0]=int(t.days/1000)
z[1]=int(t.days%1000/100)
z[2]=int(t.days%100/10)
z[3]=int(t.days%10)
Danach werden die vier anzuzeigenden Ziffern in den vier Elementen der Liste z[] gespeichert. t.days liefert die Tage in dem Datumsobjekt.
Die Funktion int() speichert nur den ganzzahligen Teil der Berechnungsergebnisse.
•Die erste Ziffer z[0] ergibt sich durch Division der Tage durch 1000.
•Die zweite Ziffer z[1] wird mit dem Modulo-Operator % berechnet. Er ergibt den unteilbaren Rest bei einer Ganzzahldivision. Das Ergebnis
wird durch 100 geteilt und ergibt die zweite Ziffer der anzuzeigenden Zahl.
•Auf die gleiche Weise wird die dritte Ziffer z[2] errechnet.
•Die vierte Ziffer z[3] ist der unteilbare Rest bei der Division durch 10.
print(z)
Diese Zeile zeigt die vier Ziffern in der Python-Shell an. Sie ist zur Berechnung nicht nötig und kann auch weggelassen werden. Anschließend
wird die Zahl mit Hilfe der bereits bekannten Endlosschleife auf der Sieben-Segment-Anzeige dargestellt.
12. Tag