User manual
50
for c in range(0, 101, 2):
p.ChangeDutyCycle(100-c); q.ChangeDutyCycle(c)
time.sleep(0.1)
q.ChangeFrequency(50)
except KeyboardInterrupt:
p.stop(); GPIO.cleanup()
6.1.3 Tako deluje
Osnovna struktura programa se sklada s strukturo prejšnjega preizkusa z nekaj majhnimi
nadgradnjami.
LED = [18,25]; GPIO.setup(LED[0], GPIO.OUT); GPIO.setup(LED[1],
GPIO.OUT)
Namesto spremenljivke za GPIO-vrata se sedaj definira seznam z dvema spremenljivkama,
s čimer se dvojna GPIO-vrata, 18 in 25, inicializirajo kot izhoda za LED.
p = GPIO.PWM(LED[0], 50); q = GPIO.PWM(LED[1], 50); p.start(0);
q.start(0)
Nato se ustvarita tudi dva objekta p in q, ki ustvarjata PWM-signale za obe LED, pri čemer
ima vsak signal po 50 Hz.
for c in range(0, 101, 2):
p.ChangeDutyCycle(c); q.ChangeDutyCycle(c)
time.sleep(0.1)
V prvi zanki se delovna cikla obeh PWM-objektov hkrati povečujeta korak za korakom. Obe
LED se v tej fazi enako vedeta.
q.ChangeFrequency(10)
Na koncu te zanke, ko obe LED dosežeta svojo polno svetilnost, se frekvenca PWM-signala
druge LED prek metode ChangeFrequency() zmanjša na 10 Hz. Oko to frekvenco še
zaznava kot utripanje.
for c in range(0, 101, 2):
p.ChangeDutyCycle(100-c); q.ChangeDutyCycle(c)
time.sleep(0.1)
Sedaj se začne druga zanka, zaradi preglednosti tudi tokrat z naraščajočim štetjem. Za prvo
LED iz PWM-objekta p, ki se mora v tem ciklu korak za korakom zatemnjevati, se v vsakem
prehodu izračunajo ustrezne vrednosti za delovni cikel. Pri drugi LED iz PWM-objekta q se
delovni cikel enostavno spet prišteva. Učinek utripanja nastane zaradi spremenjene
frekvence.
q.ChangeFrequency(50)
Na koncu druge zanke se frekvenca te LED ponovno ponastavi na 50 Hz, tako da lahko v
naslednjem ciklu spet počasi postaja svetlejša točno tako kot prva LED.