Bouw een Touchscreen Boter-Kaas-en-Eieren Spel op Arduino Due
Onderdelen en Benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino Due | 1 |
| 2,8" TFT LCD met Touchscreen (ILI9341) | 1 |
| Jumper Wires | 1 set |
Apps en Online Services
- Arduino IDE
Benodigde Bibliotheken
- Adafruit GFX Library
- Adafruit ILI9341 Library
- URTouch Library
Over dit Project
Deze implementatie van Boter-Kaas-en-Eieren (Tic-Tac-Toe) is gebaseerd op het werk van nickthegreek82. Het project bevat twee versies: een standaard AI en een onverslaanbare minimax AI.
Aansluitschema
Touchscreen → Arduino Due
| Touch Pin | Arduino Due Pin |
|---|---|
| T_IRQ | 22 |
| T_DO | 24 |
| T_DIN | 26 |
| T_CS | 28 |
| T_CLK | 30 |
Display → Arduino Due
| Display Pin | Arduino Due Pin |
|---|---|
| SDO (MISO) | A.25 |
| LED | 3.3V |
| SCK | A.27 |
| SDI (MOSI) | A.26 |
| DC | 9 |
| RESET | 8 |
| CS | 10 |
| GND | GND |
| VCC | 3.3V |
Ontwikkelgeschiedenis
- 22-08-2017: AI verbeterd & code geoptimaliseerd
- 26-08-2017: Verdere optimalisaties
- 27-08-2017: Uitdaging: kun jij winnen van de CPU?
- 13-03-2018: Betere AI implementatie (credits: klauscam)
Code Versie 1: Standaard AI
Deze versie gebruikt een regelgebaseerde AI die probeert te winnen, blokkeert, en anders willekeurige zetten doet.
// Belangrijkste functies:
void playerMove() { /* Touch detectie → bordpositie bepalen → X tekenen */ }
void arduinoMove() {
// 1. Eerste zet: hoek kiezen
// 2. Tweede zet: centrum als vrij
// 3. Check of CPU kan winnen (2 op rij)
// 4. Check of speler kan winnen → blokkeren
// 5. Fork-mogelijkheden checken
// 6. Willekeurige vrije plek
}
void checkWinner() { /* 8 win-combinaties checken, winlijn tekenen */ }
Volledige code is te lang voor hier – zie origineel of GitHub.
Code Versie 2: Onverslaanbare Minimax AI (TicTacToe_new)
Deze versie implementeert de Minimax algoritme met alpha-beta pruning voor perfecte spelsterkte. De computer kan niet verliezen – maximaal gelijkspel.
Kernalgoritme
int minimax(int board[9], int player, int depth) {
int winner = win(board);
if(winner != 0) return winner * player; // Terminal node
int move = -1, score = -2;
for(int i = 0; i < 9; ++i) {
if(board[i] == 0) {
board[i] = player;
int thisScore = (depth < difficulty) ? -minimax(board, -player, depth+1) : 0;
if(thisScore > score) { score = thisScore; move = i; }
board[i] = 0;
}
}
return (move == -1) ? 0 : score;
}
void computerMove(int board[9]) {
int move = -1, score = -2;
for(int i = 0; i < 9; ++i) {
if(board[i] == 0) {
board[i] = 1; // CPU = 1
int tempScore = -minimax(board, -1, 0);
board[i] = 0;
if(tempScore > score) { score = tempScore; move = i; }
}
}
board[move] = 1; drawCpuMove(move);
}
Spelverloop
- Startscherm → "Gamestart" knop
- Kies wie begint: JIJ (mens) of CPU
- 3x3 grid tekenen op touchscreen
- Afwisselend zetten tot winst/gelijkspel/bord vol
- Resultaat tonen: "HUMAN WINS", "CPU WINS" of "DRAW"
- "Again?" knop voor herstart
Grafische Elementen
- X (speler) = Blauw bitmap
- O (CPU) = Rood bitmap (cirkel)
- Winlijn = Witte lijn door winnende combinatie
- Log/debug output in rechter kolom
Schema

Productieproces
- Aangepaste 4×4 Boter-Kaas-Eieren Visitekaartje PCB – Ontwerp, Bouw en Code Handleiding
- K30 CO2-sensor: Real-time binnenluchtkwaliteitmonitoring met Arduino
- Communicatie voor doofblinden vergemakkelijken met 1Sheeld en Arduino
- Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Een DFRobot Capacitieve Vingerafdruksensor integreren met Arduino of ESP8266
- Interactief Nextion HMI-weerstation met Arduino Mega en sensoren
- Arduino-gebaseerde 6-DoF Robotarm Gestoeerd met Wii Nunchuk
- Accurate zonnestralingsmeting met Arduino UNO en Ethernet Shield
- Compact Arduino Radarsysteem met HC-SR04 Ultrasonische Sensor & 1.8" Display
- Maak Muzikale Tonen met Arduino: Stapsgewijze Handleiding