Skip to main content

Ingebouwd lampje

Op de Nano RP2040 Connect zit een ingebouwd lampje met de naam LED, dus je hoeft niets aan te sluiten. Daarnaast zit er een RGB-lampje op het bord dat rood, groen of blauw kan oplichten.

Lampje aanzetten​

Je eerste programma. Het hele programma is drie regels — en je bouwt het regel voor regel op, zodat je van elke regel weet wat hij doet.

Hier bouw je op verder: Variabelen en Aanroepen met een punt

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

Stap 1: Haal het gereedschap op​

Typ deze regel in je editor en druk op Run:

from machine import Pin
  1. Regel 1:

    machine is een module: een verzameling kant-en-klaar gereedschap die al op je bord zit. Met from machine import Pin pak je er één stuk uit, Pin, waarmee je de pinnen van het bord kunt bedienen.

Er gebeurt na Run niets zichtbaars. Dat klopt: je hebt alleen gereedschap klaargelegd, je gebruikt het nog nergens.

Stap 2: Kies een pin en bewaar hem​

Voeg de tweede regel toe en druk weer op Run:

from machine import Pin

pin_van_lampje = Pin('LED', Pin.OUT)

Pin('LED', Pin.OUT) maakt een pin-object aan. Tussen de haakjes geef je twee dingen mee:

  • 'LED' is de naam van de pin op het bord waar het ingebouwde lampje aan hangt.
  • Pin.OUT zegt dat je de pin als uitgang gebruikt: het bord stuurt er stroom naartoe, in plaats van iets te meten.

Dat object bewaar je in de variabele pin_van_lampje, zodat je er in de volgende regel iets mee kunt doen.

Ook nu zie je nog niets gebeuren. De pin staat klaar, meer niet.

Stap 3: Zet het lampje aan​

Voeg de derde regel toe en druk op Run:

from machine import Pin

pin_van_lampje = Pin('LED', Pin.OUT)
pin_van_lampje.on()

pin_van_lampje.on() roept met de punt de methode on() aan op jouw pin-object. Nu loopt er stroom naar de pin — het lampje brandt.

Weer uit​

Uitzetten is dezelfde variabele met een andere methode:

pin_van_lampje.off()
Controlevraag

Wat doet Pin.OUT?

Antwoord

Pin.OUT vertelt de microcontroller dat deze pin een uitgang is. De microcontroller stuurt dan stroom naar buiten (om bijvoorbeeld een lampje aan te zetten) in plaats van iets te lezen.

Laat het lampje knipperen​

Je script van hierboven stopt zodra de laatste regel is uitgevoerd. Knipperen is iets anders: aan, even wachten, uit, even wachten — en dat steeds opnieuw. Daarvoor heb je twee nieuwe dingen nodig: herhaling (een loop) en tijd (een pauze).

Hier bouw je op verder: De while-loop

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

Stap 1: Een tweede import​

Pauzeren kan met sleep, een functie uit de module time. Zet de nieuwe import onder de eerste:

from machine import Pin
from time import sleep

pin_van_lampje = Pin('LED', Pin.OUT)

De regel pin_van_lampje.on() heb je hier weggehaald; die komt zo in de loop terecht.

Stap 2: De loop erbij​

Voeg de loop toe en druk op Run. Let op het inspringen: de regel onder while True: staat een tab naar rechts, en dat is niet voor de sier — zo weet Python welke regels bij de loop horen.

from machine import Pin
from time import sleep

pin_van_lampje = Pin('LED', Pin.OUT)

while True:
pin_van_lampje.on()

while True: betekent: blijf de ingesprongen regels herhalen, voor altijd. Het lampje lijkt nu stil te branden, maar onder water zet de loop het duizenden keren per seconde opnieuw aan.

Stap 3: Uit, en wachten​

Vul de loop aan tot vier regels en druk op Run:

from machine import Pin
from time import sleep

pin_van_lampje = Pin('LED', Pin.OUT)

while True:
pin_van_lampje.on()
sleep(1)
pin_van_lampje.off()
sleep(1)

sleep(1) pauzeert één seconde. De loop doet nu steeds: aan, seconde wachten, uit, seconde wachten. Je lampje knippert tot je op Stop drukt of de stekker eruit trekt.

Voorspel: wat als je de twee sleep-regels weghaalt?​

Antwoord

De loop draait dan duizenden keren per seconde. Het lampje gaat nog steeds aan en uit, maar zo snel dat je ogen er één zwak brandend lampje van maken. De code is niet kapot — hij is alleen te snel om te zien.

Controlevraag

Waarom staat pin_van_lampje = Pin('LED', Pin.OUT) boven de loop en niet erin?

Antwoord

De pin hoeft maar één keer klaargezet te worden. Alles wat eenmalig is staat boven de loop; alles wat steeds opnieuw moet gebeuren staat erin.

Een kleur kiezen​

Naast het gewone lampje zit er ook een RGB-lampje op het bord. Daarmee kun je kiezen of het rood, groen of blauw oplicht via drie speciale pinnen: LED_RED, LED_GREEN en LED_BLUE.

Code​

Het script is je knipperscript uit Laat het lampje knipperen, met twee verschillen: een andere pinnaam, en value() in plaats van on() en off(). Kies zelf een van de drie kleurnamen:

from machine import Pin
from time import sleep

kleur_pin = Pin('LED_RED', Pin.OUT)

while True:
kleur_pin.value(0)
sleep(1)
kleur_pin.value(1)
sleep(1)

Let op: 0 is aan, 1 is uit​

value() is een methode waar je een getal aan meegeeft. Bij de ingebouwde RGB-LED zit het omgedraaid:

  • .value(0) zet het lampje aan
  • .value(1) zet het lampje uit
Tip

Verander 'LED_RED' in 'LED_BLUE' of 'LED_GREEN' om een andere kleur te krijgen.

Opdracht: meerdere kleuren tegelijk

Kun je rood en blauw allebei tegelijk aan zetten? Welke kleur krijg je dan?

Oplossing
from machine import Pin

rood = Pin('LED_RED', Pin.OUT)
blauw = Pin('LED_BLUE', Pin.OUT)

rood.value(0)
blauw.value(0)

Rood en blauw samen geeft paars/magenta. Probeer ook rood + groen (geel) en groen + blauw (cyaan).

Er gaat iets mis​

Foutmelding: ImportError: no module named 'machine'

Oorzaak: Je code draait op je computer in plaats van op het bord. De module machine bestaat alleen in MicroPython.

Oplossing: Controleer in MicroPython kiezen dat je interpreter op MicroPython staat en dat je bord verbonden is.

Foutmelding: NameError: name '...' isn't defined

Oorzaak: De naam in regel 3 is niet precies dezelfde als de naam in regel 2. Python ziet pin_van_lampje en pin_van_lampie als twee verschillende variabelen.

Oplossing: Vergelijk de twee namen letter voor letter en maak ze gelijk.

Foutmelding: IndentationError: expected an indented block

Oorzaak: De regels onder while True: springen niet in.

Oplossing: Zet één tab (of vier spaties) voor elke regel die bij de loop hoort. Gebruik overal hetzelfde — tabs en spaties mengen geeft ook fouten.

Het lampje knippert niet, het blijft branden

Oorzaak: Eén van de twee sleep-regels ontbreekt, of pin_van_lampje.off() staat buiten de loop.

Oplossing: Vergelijk je script letterlijk met het blok bij Stap 3 van Laat het lampje knipperen.

Zelf vinden: zet print("rondje") in de loop. Komen er in de Shell wél regels voorbij maar knippert er niets, dan draait de loop en zit de fout in de aan/uit-regels; zie je niets, dan draait de loop zelf niet.