Das QYF-TM1638 (oft auch als HCW-132 bezeichnet) ist ein extrem vielseitiges Interface-Modul für Mikrocontroller wie den Arduino. Es kombiniert drei wesentliche Komponenten auf einer Platine:
- Acht 7-Segment-Anzeigen: Ideal für Zahlen, einfache Texte und sogar minimale Animationen.
- 16 Tastenschalter: Angeordnet in einer 4x4 Matrix, was es perfekt für Tastatureingaben macht.
- Ansteuerung über nur 3 Pins: Dank des TM1638-Chips sparen wir massenweise GPIO-Pins am Arduino.
Es ist das perfekte Modul, um ohne Kabelsalat interaktive Projekte zu realisieren, die über einfaches LED-Blinken hinausgehen. Die 2 Projekte auf dieser Seite mit dem QYF-TM1638 ist Retro-Computing am Limit: Taschenrechner & Dino-Game auf 7 Segmenten.
Pin-Belegung und Verdrahtung
Um das Board mit einem Arduino (z. B. UNO oder Nano) zu verbinden, werden lediglich 5 Kabel benötigt. In diesem Projekt nutzen wir folgende Belegung:
| Modul Pin | Arduino Pin | Funktion |
| VCC | 5V | Stromversorgung |
| GND | GND | Masse |
| STB (Strobe) | D4 | Chip-Auswahl |
| CLK (Clock) | D6 | Taktsignal |
| DIO (Data) | D7 | Datentransfer |
Wichtiger Hinweis zur Hardware-Verbindung
Achte beim Nachbauen dieser Projekte immer genau auf die Pin-Belegung im Code, da ich das Board zum Testen oft umgedreht direkt auf den Arduino stecke und die digitalen Pins 2 (GND) sowie 6 (VCC) als Stromversorgung nutze. Dieses spezielle Setup erkennst du im Sketch sofort an der niedrigen Helligkeitsstufe 1, welche die Ausgänge des Controllers vor Überlastung schützt. Falls du das Board stattdessen klassisch über Jumper-Kabel an die echten Power-Pins anschließt, kannst du die digitalWrite-Befehle für die Pins 2 und 6 einfach löschen und alle Anschlüsse völlig frei im Code vergeben. Zum testen kannst du dein Borad aber auch immer so einstecken.
Die Library: TM1638plus
Für die Programmierung nutze ich die leistungsstarke Library TM1638plus. Da das Board 16 Tasten besitzt, musst du das Model 2 bei der Programmierung verwenden.
#include <TM1638plus.h>: Die Basis-Bibliothek.
#include <TM1638plus_Model2.h>: Die spezifische Erweiterung für das 16-Tasten-Layout.
Der erste Test: Tasten auslesen
Bevor wir komplexe Logik programmieren, müssen wir sicherstellen, dass die Kommunikation steht. Dieser Test-Code zeigt die gedrückte Taste sowohl im Seriellen Monitor als auch auf dem Display an.
Erklärung: Das Objekt tm wird mit unseren Pins initialisiert. In der loop() fragen wir mit ReadKey16() kontinuierlich ab, ob eine Taste gedrückt wurde. Ein Rückgabewert von 0 bedeutet "keine Taste", während 1-16 die jeweilige Taste identifiziert. Das ist die Basis für jede Menüsteuerung.
Der Arduino Code zum auslesen und anzeigen
Projekte mit dem QYF-TM1638 Board
Projekt 4: Tausendstel Stoppuhr
Projekt 1: Der Taschenrechner
Hier verwandelst du das Board in einen voll funktionsfähigen Rechner für Grundrechenarten, auf eine Kommastelle genau.

Die Tasten-Matrix (Name: Key-Mapping)
// Beispielhafte Zuweisung der Tasten zu Zahlen
if (taste >= 1 && taste <= 10) {
aktuelleZahl = taste - 1; // Taste 1 ist die 0, Taste 2 die 1...
}
Erklärung: Da die Tasten nur Nummern von 1-16 zurückgeben, müssen wir sie im Code "übersetzen". Wir definieren, welche Taste eine Zahl ist und welche eine Operation wie Plus oder Minus darstellt.
Speichern der Operanden (Name: Rechenlogik)
if (taste == 13) { // Beispiel für "Plus"
ergebnis = zahl1 + zahl2;
modus = ' ';
}
Erklärung: Der Rechner muss sich die erste Zahl merken, wenn eine Operationstaste gedrückt wird. Erst beim Drücken der "Gleich"-Taste wird die Berechnung ausgeführt und die Variable ergebnis aktualisiert.
Formatierte Ausgabe (Name: Display-Output)
tm.DisplayDecNum(ergebnis, 0, false, TMAlignTextRight);
Erklärung: Mit DisplayDecNum wird das Ergebnis rechtsbündig auf den 8 Stellen des Displays ausgegeben. Das sorgt für das typische Taschenrechner-Gefühl.
Der vollständige Arduino für den Taschenrechner
Projekt 2: Das Dino-Spiel (Chrome Easter Egg Style)
Wer hätte gedacht, dass man auf acht 7-Segment-Stellen ein Spiel spielen kann?

Den Dino zeichnen (Name: Segment-Animation)
// Ein 'u' auf der unteren Hälfte als Dino
tm.DisplayASCII(pos, 'u');
Erklärung: Da wir keine Pixel haben, nutzen wir Buchstaben. Ein kleines 'u' oder Segmente am unteren Rand stellen den Dino dar, während wir Segmente am oberen Rand für den Sprung nutzen.
Die Hindernis-Bewegung (Name: Shift-Register-Logik)
for (int i = 0; i < 7; i++) {
displayInhalt[i] = displayInhalt[i+1]; // Hindernis rückt nach links
}
Erklärung: Das Spiel basiert auf einem Array, das die 8 Stellen des Displays repräsentiert. In jedem Frame rücken die Hindernisse (z. B. ein '|') eine Stelle nach links auf den Dino zu.
Kollisionsabfrage (Name: Hit-Detection)
if (hindernisPos == dinoPos && !isJumping) {
gameOver = true;
}
Erklärung: Das Herzstück des Spiels. Es wird geprüft, ob sich an der Position des Dinos ein Hindernis befindet, während der Dino nicht im Sprung-Modus (also oben) ist. Wenn das passiert: Game Over!
Der Arduino Code für das Dino Spiel
Projekt 3: Das unendliche Gedächtnis-Spiel
Hier forderst du dein Gehirn heraus, indem du dir eine immer länger werdende Zahlenfolge merkst, die mit steigendem Level von Einzelziffern bis hin zu dreistelligen Zahlen reicht.
Die Code-Logik im Detail
Dynamische Schwierigkeit (Name: Level-Management)
nextNumber = random(0, 10); // 1-stellig
} else if (currentLevel < 20) {
nextNumber = random(10, 100); // 2-stellig
}
Erklärung: Das Spiel passt sich deinem Können an. Damit es nicht langweilig wird, erhöht der Code nach jeweils 10 geschafften Runden die Anzahl der Stellen, die du dir pro Schritt merken musst.
Mehrstellige Eingabe (Name: Eingabe-Logik)
currentInput = (currentInput * 10) + digit;
digitsEntered = true;
}
Erklärung: Da du im späteren Spielverlauf auch zwei- oder dreistellige Zahlen eingeben musst, "sammelt" der Code deine Tastendrücke hintereinander auf. Erst wenn du die Enter-Taste (16) drückst, wird die gesamte Zahl als eine Einheit gewertet.
Sequenzieller Vergleich (Name: Vergleichs-Logik)
tm.DisplayStr(" GOOD ", 0);
} else {
tm.DisplayStr(" FAIL ", 0);
gameOver = true;
}
Erklärung: Nach jeder Zahl, die du eingibst, prüft das Programm sofort, ob sie an dieser Stelle der Kette korrekt ist. So erhältst du direktes Feedback, bevor du die nächste Zahl der Folge eintippen musst.
Der Arduino code für eine reine Zahlen Version von Simon sagt
Projekt 4 (Finale Version): Die Profi-Stoppuhr mit Runden-Memory
Diese Version macht aus deinem Board einen echten Sport-Timer. Du kannst während des Laufs bis zu 15 Zwischenzeiten (Laps) auf den Tasten 1-15 "einfrieren". Das System erkennt automatisch, ob ein Speicherplatz belegt ist oder nicht.
Die Code-Logik im Detail
Speicher-Management (Name: Memory-Handling)
if (modus == 1) {
lapTimes[button - 1] = millis() - startZeit;
tm.DisplayStr("SAVED ", 0);
}
}
Erklärung: Das Array lapTimes fungiert als dein digitales Notizbuch. Wenn die Uhr läuft, wird der aktuelle Zeitstempel direkt in die Schublade der jeweiligen Taste geschrieben. Das kurze "SAVED" im Display gibt dir die Sicherheit, dass die Zeit registriert wurde.
Status-Abfrage (Name: Empty-Check)
updateDisplay(m, s, ms);
} else {
tm.DisplayStr("EMPTY ", 0);
}
Erklärung: Beim Abrufen der Zeiten im Stand prüft der Code, ob der Wert im Speicher größer als Null ist. Falls du die Taste während des Laufs nicht gedrückt hast, zeigt das Board "EMPTY" an. So weißt du sofort, welche Tasten du bereits belegt hast.
Automatischer Reset (Name: Clear-Logic)
for(int i = 0; i < 15; i++) lapTimes[i] = 0;
tm.reset();
}
Erklärung: Sobald du nach einem Stopp die Taste 16 für den Reset drückst, wird nicht nur das Display genullt, sondern auch das gesamte Speicher-Array gelöscht. Damit ist das Board sofort bereit für eine komplett neue Messreihe, ohne dass alte Zeiten stören.
Der Arduino Code für die Stoppuhr mit tausendstel Sekunden
12 weitere Projektideen für dein TM1638-Board/ hcw-132-Board
- Binär-Uhr & Wecker, Nutze die 8 Stellen für Stunden, Minuten und Sekunden. Die LEDs können zusätzlich die Zeit im Binärformat anzeigen – ein echter Hingucker für Nerds.
- Pomodoro-Timer, Produktivitäts-Tool, das Arbeitsphasen (25 Min.) und Pausen (5 Min.) herunterzählt. Die Tasten dienen zum Starten, Stoppen und Resetten.
- Reaktionstest-Spiel, Eine LED leuchtet zufällig auf, und du musst so schnell wie möglich die entsprechende Taste drücken. Das Display zeigt deine Reaktionszeit in Millisekunden.
- Digitales Scoreboard, Perfekt für Kicker, Tischtennis oder Brettspiele. Mit den Tasten kannst du die Punkte für zwei Spieler unabhängig voneinander hoch- und runterzählen.
- Morse-Code-Trainer, Gib über eine Taste Morse-Signale ein. Das Display "übersetzt" deine Klicks in Echtzeit in Buchstaben oder zeigt dir Wörter an, die du nachmorsen musst.
- PC-Status-Monitor Verbinde den Arduino mit deinem PC. Lass dir CPU-Auslastung, RAM-Verbrauch oder die GPU-Temperatur direkt auf dem TM1638-Display anzeigen.
- Mastermind (Logikrätsel), Der Arduino denkt sich einen vierstelligen Code aus. Du gibst Tipps über die Tastatur ein, und das Display verrät dir, wie viele Zahlen an der richtigen Stelle stehen.
- Musik-Metronom, Stelle über die Tasten die BPM (Beats per minute) ein. Die LEDs blinken im Takt, und das Display zeigt das aktuelle Tempo an.
- Interaktiver Vokabeltrainer, Lade eine Liste von Wörtern hoch. Das Board zeigt ein deutsches Wort, und du musst über ein Multiple-Choice-Verfahren (Tasten 1-4) die richtige Übersetzung wählen.
- Zufallszahlengenerator & Würfel, Ersetze deine Würfel bei Brettspielen. Per Knopfdruck erscheint eine Zahl zwischen 1 und 6 (oder 1 und 100) mit einer coolen "Roll"-Animation.
- Passwort-Safe (Dummy), Simuliere ein Türschloss. Nur wenn die richtige Zahlenkombination über die 16 Tasten eingegeben wird, leuchten alle grünen LEDs auf und ein Servo (optional) öffnet sich.
- Küchen-Multi-Time, Überwache bis zu vier Kochtöpfe gleichzeitig. Das Display zeigt den Timer an, der als Nächstes abläuft, während du mit den Tasten zwischen den Timern wechselst.




