Wat je nodig hebt
-
Het 0.96" OLED-schermpje met vier pinnen: GND · VDD · SCK · SDA. Op de sticker staatIIC OLED SSD1306. - Je Arduino (Uno R4 of Mega 2560 — kies hierboven).
-
Vier dupont-draadjes (male-female recht naar het bord kan al).
- Voor het spel in stap 6: één drukknop (of gewoon een los draadje).
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!
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.
Aansluiten — maar vier draadjes
| Scherm | Naar je Arduino | Draad |
|---|---|---|
| GND | GND | zwart |
| VDD | 5V | rood |
| SCK | SCL / A5 | teal |
| SDA | SDA / A4 | blauw |
Libraries installeren
Ga in de Arduino IDE naar Sketch → Include Library → Manage Libraries… en installeer:
- Adafruit SSD1306 (de driver voor dit schermpje).
- Adafruit GFX Library (de teken-gereedschapskist — de IDE vraagt vaak of hij die er meteen bij zet; zeg ja).
0x3C — dat gebruiken we hieronder.
Blijft je scherm zwart terwijl de rest klopt? Probeer dan 0x3D.
Eerste sketch: je naam op het scherm
Upload dit. Let op de laatste regel van setup(): zonder oled.display() blijft het scherm leeg!
#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
}
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.
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().
#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):
| Commando | Wat 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. |
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.
#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);
}
-6 (sprongkracht) en 0.6 (zwaartekracht).
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.
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.