ARDUINO WERKPLAATS
◂ de zachtste start · geen voorkennis Start · het OLED-schermpje

Klein schermpje,
grote eerste stap.

Het perfecte schermpje om mee te beginnen: het 0.96 inch OLED. Maar vier draadjes, en je hoeft niks in te stellen. We leren tekst tonen, tekenen en zelfs een klein spel maken. Alles wat je hier leert werkt daarna precies zo op de grotere kleurenschermen.

Scherm: 0.96" OLED Chip: SSD1306 128 × 64 · zwart-wit Aansluiten: 4 draadjes
Welk bord gebruik je?
Dit past de I2C-pinnen aan: op de R4 gebruik je SDA/SCL (of A4/A5).
0

Wat je nodig hebt

  • 0.96 inch OLED-schermpje Het 0.96" OLED-schermpje met vier pinnen: GND · VDD · SCK · SDA. Op de sticker staat IIC OLED SSD1306.
  • Je Arduino (Uno R4 of Mega 2560 — kies hierboven).
  • dupont-draadjes Vier dupont-draadjes (male-female recht naar het bord kan al).
  • Voor het spel in stap 6: één drukknop (of gewoon een los draadje).
Waarom dit het makkelijkste scherm is "OLED" betekent dat elke pixel zijn eigen lichtje is — geen achtergrondverlichting nodig, en het beeld is superscherp. En het praat via I2C: dat kost maar twee datadraadjes. Ideaal om mee te leren.
1

Wat is er anders dan een gewoon scherm?

Twee dingen zijn nieuw. Als je die snapt, snap je dit scherm helemaal:

1. Het is zwart-wit

Er is geen kleur — elke pixel is aan (licht) of uit (donker). In code heet "aan" SSD1306_WHITE en "uit" SSD1306_BLACK. Dat is niet erg: met wit-op-zwart maak je verrassend veel — tekst, figuren, en zelfs een spel.

2. Je tekent eerst in het geheugen, dán op het scherm

Dit is de belangrijkste truc. Al je teken-commando's komen eerst in een soort kladblok (een buffer) in het geheugen. Pas als je oled.display() aanroept, wordt dat kladblok in één keer op het scherm gezet. Vergeet je die regel, dan zie je niets!

kladblok (buffer) fillRect(...) print(...) oled.display() het scherm zichtbaar!
Teken zoveel je wilt in het kladblok — oled.display() maakt het in één keer zichtbaar.

De vier pinnen:

GND
De min / 0 volt.
VDD
Voeding. 5V of 3.3V mag allebei.
SCK
De I2C-klok (heet ook wel SCL).
SDA
De I2C-datalijn.
2

Aansluiten — maar vier draadjes

OLED (I2C) Arduino Uno R4 GNDGND VDD5V SCKSCL (of A5) SDASDA (of A4)
Let op: SCK op het schermpje gaat naar SCL van je Arduino (dat is de klok).
SchermNaar je ArduinoDraad
GNDGNDzwart
VDD5Vrood
SCKSCL / A5teal
SDASDA / A4blauw
3

Libraries installeren

Ga in de Arduino IDE naar Sketch → Include Library → Manage Libraries… en installeer:

  1. Adafruit SSD1306 (de driver voor dit schermpje).
  2. Adafruit GFX Library (de teken-gereedschapskist — de IDE vraagt vaak of hij die er meteen bij zet; zeg ja).
Het I2C-adres Bijna al deze schermpjes luisteren naar adres 0x3C — dat gebruiken we hieronder. Blijft je scherm zwart terwijl de rest klopt? Probeer dan 0x3D.
4

Eerste sketch: je naam op het scherm

Upload dit. Let op de laatste regel van setup(): zonder oled.display() blijft het scherm leeg!

01_hallo_oled.ino
#include <Wire.h>               // voor I2C
#include <Adafruit_GFX.h>       // de teken-gereedschapskist
#include <Adafruit_SSD1306.h>   // de driver voor dit schermpje

Adafruit_SSD1306 oled(128, 64, &Wire, -1);   // breedte, hoogte

void setup() {
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);    // start het scherm (adres 0x3C)
  oled.clearDisplay();                       // maak het kladblok leeg
  oled.setTextColor(SSD1306_WHITE);
  oled.setTextSize(2);
  oled.setCursor(0, 10);                     // kolom 0, rij 10
  oled.print("Hallo!");
  oled.setTextSize(1);
  oled.setCursor(0, 40);
  oled.print("Ik ben Robin");
  oled.display();                            // <-- maak alles zichtbaar
}

void loop() {
  // leeg: we tekenen maar een keer
}
Herken je dit? setCursor, setTextSize, print — dit zijn exact dezelfde commando's als op de grote kleurenschermen. Alleen de opstart bovenaan en die ene oled.display() zijn anders.
5

Tekenen & animeren

Het scherm is een raster van 128 breed en 64 hoog. Linksboven is (0,0). Je tekent met dezelfde commando's als altijd — hier een balletje dat heen en weer stuitert. De animatie-truc: elke ronde het kladblok wissen, opnieuw tekenen, en display().

02_stuiterbal.ino
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 oled(128, 64, &Wire, -1);

int x = 20, y = 20;      // plek van de bal
int dx = 2, dy = 2;      // richting/snelheid

void setup() {
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}

void loop() {
  // bewegen en van de randen afketsen
  x += dx;
  y += dy;
  if (x <= 3 || x >= 124) dx = -dx;
  if (y <= 3 || y >= 60)  dy = -dy;

  oled.clearDisplay();                 // wis het kladblok
  oled.drawRect(0, 0, 128, 64, SSD1306_WHITE);   // een randje
  oled.fillCircle(x, y, 3, SSD1306_WHITE);       // de bal
  oled.display();                      // toon alles

  delay(20);
}

De handigste teken-commando's (net als op de kleurenschermen, maar met SSD1306_WHITE als kleur):

CommandoWat het doet
clearDisplay()Maakt het kladblok leeg (nog niet zichtbaar).
fillRect(x,y,b,h,kleur)Gevuld rechthoekje.
fillCircle(x,y,r,kleur)Gevulde cirkel.
drawLine(x0,y0,x1,y1,kleur)Een lijn.
display()Zet het kladblok op het scherm.
6

Een simpel spel: Spring!

Een mannetje (een blokje) rent op zijn plek; van rechts komen blokjes aan. Druk op de knop om te springen en ze te ontwijken. Elke ontweken hindernis is een punt.

Sluit een drukknop aan tussen pin 2 en GND (of raak die twee heel even met een draadje aan om te "springen"). Door INPUT_PULLUP heb je geen weerstand nodig.

3
Zwart-wit, maar een écht spel — precies op maat voor 128×64.
03_spring.ino
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 oled(128, 64, &Wire, -1);
#define KNOP 2

const int GROND = 48;        // y waar de speler op staat (8 hoog -> tot 56)
int spelerY = GROND;
float vy = 0;                // verticale snelheid
bool inLucht = false;
int hindX = 128;
int score = 0;
bool gameOver = false;

void resetSpel() {
  spelerY = GROND; vy = 0; inLucht = false;
  hindX = 128; score = 0; gameOver = false;
}

void setup() {
  pinMode(KNOP, INPUT_PULLUP);
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}

void loop() {
  if (gameOver) {
    oled.clearDisplay();
    oled.setTextColor(SSD1306_WHITE);
    oled.setTextSize(2);
    oled.setCursor(6, 8);  oled.print("GAME OVER");
    oled.setTextSize(1);
    oled.setCursor(6, 40); oled.print("Score: "); oled.print(score);
    oled.setCursor(6, 52); oled.print("Druk om opnieuw");
    oled.display();
    if (digitalRead(KNOP) == LOW) { delay(300); resetSpel(); }
    return;
  }

  // springen als je op de grond staat
  if (digitalRead(KNOP) == LOW && !inLucht) { vy = -6; inLucht = true; }

  // zwaartekracht
  vy += 0.6;
  spelerY += (int)vy;
  if (spelerY >= GROND) { spelerY = GROND; vy = 0; inLucht = false; }

  // hindernis naar links
  hindX -= 3;
  if (hindX < -6) { hindX = 128; score++; }

  // botsing? (speler x 16..24, hindernis x hindX..hindX+6, allebei op de grond)
  if (hindX < 24 && hindX + 6 > 16 && spelerY + 8 > GROND) {
    gameOver = true;
  }

  // tekenen
  oled.clearDisplay();
  oled.drawLine(0, 56, 127, 56, SSD1306_WHITE);      // grond
  oled.fillRect(16, spelerY, 8, 8, SSD1306_WHITE);   // speler
  oled.fillRect(hindX, GROND, 6, 8, SSD1306_WHITE);  // hindernis
  oled.setTextSize(1);
  oled.setTextColor(SSD1306_WHITE);
  oled.setCursor(0, 0); oled.print(score);
  oled.display();

  delay(30);
}
Reageert het niet? Controleer of de knop echt tussen pin 2 en GND zit. Springt het mannetje te laag of te hoog? Speel met de getallen -6 (sprongkracht) en 0.6 (zwaartekracht).
7

En dan?

Gefeliciteerd — je hebt een scherm aangestuurd, getekend én een spel gemaakt. En het mooiste: alles wat je hier leerde werkt net zo op de andere schermen. Wil je verder?

  • Ga naar het kleuren-TFT-project — dezelfde teken-commando's, maar nu met kleur en groter.
  • Sluit een afstandssensor of temperatuursensor aan en toon de metingen op je OLED (denk aan oled.display()!).
  • Verzin je eigen spel: een teller, een reactietest, of een sterrenhemel.

Goed begin

Je bent nu maker

Klein scherm, grote sprong. Dezelfde bouwstenen — aansluiten, tekenen, en een loop die zich herhaalt — vind je in élk project van de werkplaats terug.

Naar het kleuren-TFT-project →  ·  Alle projecten