In dieser Anleitung möchten wir mit einem Arduino-Mikrocontroller eine Siebensegmentanzeige ansteuern, die über einen TM1637 Chip verfügt.
Das Modul gibt es in verschiedenen Farben.
An der Seite des 7Segmentmoduls gibt es eine Bezeichnung, mit der sich die Farbe der Module ablesen lässt:
Blau: 5643BB
Grün: 5643GB
Rot: 5643BH
Weiß: 5643BW
Gelb: 5643BY
Vorbereitung
Um das Display verwenden zu können, greifen wir auf eine Library zurück. Gebe dafür im Bibliothekenmanager der Arduinosoftware den Suchbegriff „TM1637“ ein. Es werden gleiche mehrere Bibliotheken angezeigt. In diesem Beispiel haben wir uns für die Bibliothek „TM1637“ von Avishay Orpaz entschieden. Nach der Installation der Library starten wir mit dem Programmieren.
Teil 1 - Eine einzelne Ziffer aufleuchten lassen
Materialbox
Arduino (z.B. Arduino Uno)
7-Segment-Anzeige mit TM1637-Chip (4-stellige Anzeige)
Jumper-Kabel / 4x Stecker und Fassung
Verkabelung
Verbinde die 5V-Pin des Arduino mit dem 5V-Pin der 7-Segment-Anzeige.
Verbinde GND vom Arduino mit dem GND-Pin der 7-Segment-Anzeige.
Verbinde den CLK-Pin der Anzeige mit einem digitalen Pin des Arduino (Pin 4).
Verbinde den DIO-Pin der Anzeige mit einem anderen digitalen Pin des Arduino ( Pin 5).
Das sieht dann so aus:
5V → 5V
GND → GND
CLK → Pin 4
DIO → Pin 5
Programmcode
Der folgende Programmcode soll nur eine einzelne Ziffer auf dem Display darstellen.
Hierzu ein paar Vorabinformationen zu den verwendeten Codezeilen:
TM1637Display display(CLK, DIO); – Hier wird das Display-Objekt mit den definierten Pins für CLK und DIO erstellt.
display.setBrightness(7); – Setzt die Helligkeit auf Maximum (0 bis 7 möglich).
display.clear(); – Löscht die Anzeige, bevor etwas angezeigt wird. Das Display wird dabei dunkel geschaltet, die LEDs gehen aus.
display.showNumberDec(5, false, 1, 0); – Zeigt die Ziffer „5“ auf der ersten Stelle an.
Die nachfolgenden Parameter haben folgende Bedeutung:
5 ist die anzuzeigende Zahl.
false gibt an, dass keine führenden Nullen angezeigt werden.
1 bedeutet, dass nur eine Stelle der Anzeige verwendet wird.
0 gibt die Position auf der Anzeige an (erste Stelle).
#include <TM1637Display.h>
// Definiere die Pins für CLK und DIO
#define CLK 4
#define DIO 5
// Erstelle ein Display-Objekt
TM1637Display display(CLK, DIO);
void setup() {
// Setze die Helligkeit der Anzeige (0 bis 7)
display.setBrightness(7);
// Lösche die Anzeige
display.clear();
// Zeige eine Ziffer an (hier die 5)
display.showNumberDec(5, false, 1, 0);
}
void loop() {
// Es ist keine weitere Aktionen im loop notwendig, da das Display bereits im Setup aktiviert wurde
}
Teil 2 - Vier Ziffern anzeigen und blinken lassen
Wir passen den Programmcode aus der ersten Aufgabe nur ein wenig an, um die Aufgabe zu lösen.
Wir verwenden den Code „display.showNumberDec(5678);“ um die gesamte Zahl „5678“ anzuzeigen. Mit einem delay soll dieser Zustand für 1 Sekunde beibehalten werden.
Danach wird das Display gelöscht und mit einem delay von 500ms bleibt es einen Kurzen Augenblick aus. Dadurch „blinkt“ das Display mit der entsprechenden Zahl.
#include <TM1637Display.h>
#define CLK 4
#define DIO 5
TM1637Display display(CLK, DIO);
void setup() {
display.setBrightness(7);
display.clear();
}
void loop() {
// Zeige die Zahl "5678" für 1 Sekunde
display.showNumberDec(5678);
delay(1000);
// Lösche die Anzeige für 500 Millisekunden (um ein Blinken zu simulieren)
display.clear();
delay(500);
}
Teil - Einen Timer Programmieren
Durch eine weitere leichte Veränderung können wir einen Timer Programmieren. Wir ergänzen im Setup die Variable x mit dem Code „int x=0;“. Der Startwert des Timers liegt bei 0.
Im Loop wird der Startwert zunächst angezeigt und dann mit der kleinen Rechnung „x = x + 1“ um den Wert 1 erhöht.
#include <TM1637Display.h>
int x=0;
#define CLK 4
#define DIO 5
TM1637Display display(CLK, DIO);
void setup() {
display.setBrightness(7);
display.clear();
}
void loop() {
// Zeige die Zahl "5678" für 1 Sekunde
display.showNumberDec(x);
delay(800);
x= x+1;
// Lösche die Anzeige für 500 Millisekunden (um ein Blinken zu simulieren)
display.clear();
delay(200);
}