6.1.1 Zo werkt het
Een deel van dit programma zal u bekend voorkomen, enkele elementen echter helemaal niet, omdat wij op
deze plaats een intermezzo in het objectgeoriënteerde programma maken. Aan het begin worden, zoals
bekend, de bibliotheken geïmporteerd. Dit keer wordt slechts een enkele variabele,
port 18 vastgelegd, deze wordt als uitgang geïnitialiseerd.
print ("Strg+C beëindigt het programma")
constructie loopt en door de gebruikers moet worden gestopt, wanneer betreffende informatie wordt
weergegeven voor de gebruiker.
p = GPIO.PWM(LED, 50)
signalen. Deze functie heeft twee parameters nodig, de GPIO-poort en de frequentie van het PWM-signaal. In
ons geval wordt de GPIO-poort via de variabele
seconde).
Waarom 50 Hertz de ideale frequentie is voor PWM
Het menselijke oog neem lichtwisselingen sneller dan 20 Hertz niet meer waar. Omdat het wissel-
spanningsnet in Europa een frequentie van 50 Hertz gebruikt, knipperen veel verlichtingseenheden met
deze frequentie, die niet meer door het oog wordt waargenomen. Wanneer een LED met meer dan 20
Hertz, maar minder dan 50 Hertz knippert, kunnen er interferenties ontstaan met andere lichtbronnen,
waardoor het dimeffect niet meer gelijkmatig lijkt.
creëert een zogenaamd object, dat in de variabele
GPIO.PWM()
veel meer dan alleen eenvoudige variabelen. Objecten kunnen verschillende eigenschappen bezitten en door
zogenaamde methoden worden beïnvloed. Methoden worden, door een punt gescheiden, direct achter de
objectnaam aangegeven.
De methode
p.start(0)
verhouding worden aangegeven. In ons geval is de pulsverhouding
start de gesloten lus, waarin direct achtereenvolgend twee lussen zijn ingebouwd, die afwisselend de LED
lichter en donkerder laten worden.
for c in range(0, 101, 2):
wordt altijd de waarde aangegeven, die net niet wordt bereikt, in ons geval
p.ChangeDutyCycle(c)
het PWM-object op de waarde van de lusteller, dus elke keer 2% hoger, tot het tijdens de laatste doorloop op
100% staat en de LED met volle lichtsterkte brandt.
In elke lusdoorloop wordt 0,1 seconde gewacht, voordat de volgende doorloop de
time.sleep(0.1)
pulsverhouding weer met 2% verhoogd.
for c in range(100, -1, -2):
p.ChangeDutyCycle(c); time.sleep(0.1)
56
De functie
GPIO.PWM()
start het genereren van het PWM-signaal. Hiervoor moet nog een puls-
start()
De lus telt in stappen van
In elke lusdoorloop zet de methode
Omdat ook dit programma met een
uit de GPIO-bibliotheek is beslissend voor uitvoer van PWM-
vastgelegd, de frequentie is 50 Hertz (trillingen per
LED
wordt opgeslagen. Dergelijke objecten zijn
p
, de LED is dus altijd uitgeschakeld. Nu
0
van
tot en met
2
0
ChangeDutyCycle()
, voor de GPIO-
LED
try...except
. Als einde van een
100
.
101
de pulsverhouding van
-
-lus
for