Het robotscript bouwen — Deel 5: Waardes op het scherm
Hier bouw je op verder
Straks rijdt je robot los van de laptop, en dan is de Shell weg. Vanaf dat moment is het OLED-scherm je venster in de robot: daar zie je wat de sensoren zien. In dit deel vervang je de print door het scherm — en daarmee staat het eerste grote mijlpunt: een robot die zelf laat zien wat hij meet.
De multiplexer en het OLED-scherm praten via I2C, en dat gebruikt de pinnen A4 en A5. Sluit daar dus geen IR-sensoren op aan; gebruik A0, A1, A2, A3, A6 of A7.
Aansluiten

Het scherm gaat via een 4-pins jumperkabel naar de multiplexer: VCC → 3,3V, GND → GND, en SDA/SCL naar channel 7. Steek je hem in een ander channel, pas dan het getal in je code aan.
Stap 1: Eerst het scherm alleen
Nieuw onderdeel, dus eerst een minimale test — los van je robotscript:
from leaphymicropython.actuators.oled_screen import OLEDSH1106
oled = OLEDSH1106(width=128, height=64, channel=7)
oled.fill('white')
oled.text('Hallo robot', 0, 0)
oled.show()
- Regel 3:
Maakt het scherm-object: 128 pixels breed, 64 hoog, op channel 7 van de multiplexer.
- Regel 5-7:
Tekenen gaat altijd in drie stappen:
fill('white')maakt het scherm leeg,text(tekst, x, y)zet tekst klaar op een positie, enshow()stuurt alles in één keer naar het scherm.
Voorspel: wat gebeurt er zonder show()?
Antwoord
Het scherm blijft leeg. fill() en text() werken in een kladversie in het geheugen; pas show() stuurt die naar het echte scherm. Dit is de vergeten-regel nummer één bij schermen — onthoud hem.
Stap 2: Het scherm in je robotscript
Terug naar je script uit Deel 4. De print-regel gaat eruit; het scherm komt ervoor in de plaats:
from time import sleep
from leaphymicropython.sensors.linesensor import AnalogIR
from leaphymicropython.actuators.oled_screen import OLEDSH1106
links = AnalogIR("A0", 2500)
rechts = AnalogIR("A1", 2500)
oled = OLEDSH1106(width=128, height=64, channel=7)
while True:
kleur_links = links.black_or_white()
kleur_rechts = rechts.black_or_white()
oled.fill('white')
oled.text('Links: ' + kleur_links, 0, 0)
oled.text('Rechts: ' + kleur_rechts, 0, 10)
oled.show()
sleep(0.2)
Let op de opbouw die je al kent: het scherm-object staat bóven de loop (eenmalig klaarzetten), het tekenen zit erin (elke ronde opnieuw). De tweede regel staat op y=10, tien pixels lager — anders schrijven de twee regels door elkaar heen.
Test het
Beweeg de robot boven de lijn. Het scherm toont Links: en Rechts: en wisselt live mee tussen white en black — zonder dat je nog naar de Shell hoeft te kijken.
Opdracht 6.4.a: een teller op het scherm
Nog even los van je robotscript: laat het scherm elke seconde een teller zien die één hoger wordt (0, 1, 2, 3, …).
Klik hier voor een tip.
Je hebt een variabele nodig die boven de loop op 0 begint en er in de loop 1 bij krijgt. Het scherm kan alleen tekst tonen, dus zet het getal in een f-string.
Klik hier voor de oplossing.
from time import sleep
from leaphymicropython.actuators.oled_screen import OLEDSH1106
oled = OLEDSH1106(width=128, height=64, channel=7)
teller = 0
while True:
oled.fill('white')
oled.text(f'Teller: {teller}', 0, 0)
oled.show()
teller = teller + 1
sleep(1)
teller = teller + 1 is het patroon voor alles wat moet oplopen; de f-string maakt er tekst van, want text() accepteert geen kaal getal.
Je script tot nu toe
Klik hier om te vergelijken
from time import sleep
from leaphymicropython.sensors.linesensor import AnalogIR
from leaphymicropython.actuators.oled_screen import OLEDSH1106
links = AnalogIR("A0", 2500)
rechts = AnalogIR("A1", 2500)
oled = OLEDSH1106(width=128, height=64, channel=7)
while True:
kleur_links = links.black_or_white()
kleur_rechts = rechts.black_or_white()
oled.fill('white')
oled.text('Links: ' + kleur_links, 0, 0)
oled.text('Rechts: ' + kleur_rechts, 0, 10)
oled.show()
sleep(0.2)
Er gaat iets mis
Het scherm blijft helemaal leeg
Oorzaak: show() ontbreekt, het scherm zit op een ander channel dan je code zegt, of de kabel zit los.
Oplossing:
- Controleer dat er ergens in je loop
oled.show()staat. - Kijk op de multiplexer bij welk channel de kabel echt zit en vergelijk met
channel=7.
Zelf vinden: zet een print("teken") naast oled.show(). Verschijnt die regel wél in de Shell, dan draait je code en zit het bij het scherm of de kabel; verschijnt hij niet, dan komt je code daar nooit.
Oude tekst blijft op het scherm staan of schuift door elkaar
Oorzaak: oled.fill('white') ontbreekt, waardoor elke ronde óver de vorige heen tekent.
Oplossing: Begin elke tekenronde met oled.fill('white'): eerst schoonvegen, dan schrijven.
Foutmelding zodra je een getal op het scherm wilt zetten
Oorzaak: text() accepteert alleen tekst, geen kaal getal.
Oplossing: Zet het getal in een f-string: oled.text(f'Waarde: {meting}', 0, 0).
Controlevraag
Waarom staat er y=10 bij de tweede tekstregel?
Antwoord
De y is de hoogte in pixels waarop de tekst begint. Twee regels op dezelfde y schrijven dwars door elkaar heen; tien pixels verschil zet ze netjes onder elkaar.
← Deel 4 — Twee sensoren · Volgende: de motoren →