Das 4 Digit 7 Segment Display mit dem Chip TM1637 hat 4 Stellen mit je 7 Segmenten, wobei nach 2 Stellen ein Doppelpunkt dargestellt werden kann.
Somit ergibt sich eine Anzeige von Zahlenwerten von 0000 bis 9999 oder eine Uhrzeit im Format HH:MM.
Für den Betrieb des Moduls ist eine Bibliothek vonnöten, welche über folgenden Link bezogen werden kann MonkeyElectronic. Nachdem die Bibliothek in die Arduino IDE integriert wurde, kann die eigentliche “Arbeit” schon losgehen.
Technische Daten
- Betriebsspannung – 5V
Anschluss am Arduino Nano / UNO
TM1637 Modul | Arduino Nano / UNO |
---|---|
VCC | 5V |
GND | GND |
DIO | digital PIN3 |
CLK | digital PIN2 |
Nachfolgender Quellcode wurde mit dem Arduino Nano & UNO getestet.
Beispiel 1 – Ausgabe von Zahlen
Quellcode
#include <Arduino.h> //Einbinden der Arduino Bibliothekt #include <TM1637Display.h> //Einbinden der Bibliothekt zum ansteuern des Displays #define CLK 2 //PIN 2 für den CLK PIN #define DIO 3 //PIN3 für den DIO //erzeugen des Display Objektes mit den Parametern für die PINs TM1637Display display(CLK, DIO); int delayVal = 500; int pause = 125; void setup() { //Setzt die Helligkeit des Displays mögliche Werte sind 0 bis 15 //Wobei 0 dunkel und 15 hell ist. display.setBrightness(8); uint8_t data[] = { 0xff, 0xff, 0xff, 0xff }; //Setzt die Anzahl der möglichen Segmente. display.setSegments(data); //Pause delay(delayVal); int k =0; for(k=0;k<1112;k++){ display.showNumberDec(k, false, 4, 4); //Zeigt die Nummer aus der FoorLoop Schleife an. delay(pause);//Pause } for(k=1111;k>0;k--){ display.showNumberDec(k, false, 4, 4); //Zeigt die Nummer aus der FoorLoop Schleife an. delay(pause); //Pause } } void loop(){}
Video
Beispiel 2 – Helligkeit des Displays
Die Helligkeit des Displays lässt sich über die Methode setBrightness() einstellen.
Es sind dabei Zahlenwerte von 0 bis 15 möglich. Wobei ein sichtbarer Effekt erst ab einem Wert von 7 eintritt (dunkel == aus) und ab dem Wert 13 keine Änderungen mehr zu erkennen sind.
Quellcode
#include <Arduino.h> //Einbinden der Arduino Bibliothekt #include <TM1637Display.h> //Einbinden der Bibliothekt zum ansteuern des Displays #define CLK 2 //PIN 2 für den CLK PIN #define DIO 3 //PIN3 für den DIO //erzeugen des Display Objektes mit den Parametern für die PINs TM1637Display display(CLK, DIO); int delayVal = 500; int pause = 1250; void setup() { uint8_t data[] = { 0xff, 0xff, 0xff, 0xff }; display.setSegments(data); delay(delayVal); for(int k=0;k<=15;k++){ display.setSegments(data); display.setBrightness(k); display.showNumberDec(k, false, 4, 4); delay(pause); } } void loop(){}
Video
Beispiel 3 – Uhrzeit
Da dieses Display “nur” 4 Stellen hat, werde ich im folgenden Beispiel die Uhrzeit im Format HH:MM ausgeben. Wobei der Doppelpunkt jede 0,5 Sekunden blinkt.
Als Zeitgeber habe ich das RTC DS3231 Modul verwendet.
Für das folgende Beispiel wird die Bibliothek TM1637 aus dem Downloadbereich “Arduino>Libraries” benötigt.
Quellcode
#include <Arduino.h> #include <TM1637Display.h> #include <Wire.h> #define RTC_I2C_ADDRESS 0x68 // I2C Adresse des RTC DS3231 #define CLK 2 #define DIO 3 TM1637Display display(CLK, DIO); bool colonVisible = false; int pause = 500; int stunde,minute,sekunde; void setup(){ Wire.begin(); Serial.begin(9600); display.setBrightness(0x0a); } void loop(){ Wire.beginTransmission(RTC_I2C_ADDRESS); //Aufbau der Verbindung zur Adresse 0x68 Wire.write(0); Wire.endTransmission(); Wire.requestFrom(RTC_I2C_ADDRESS, 7); sekunde = bcdToDec(Wire.read() & 0x7f); minute = bcdToDec(Wire.read()); stunde = bcdToDec(Wire.read() & 0x3f); display.setColon(colonVisible); if(colonVisible){ Serial.print(stunde); Serial.print(":"); Serial.print(minute); Serial.print(":"); Serial.println(sekunde); display.showNumberDec(stunde, true, 2, 0); display.showNumberDec(minute, true, 2, 2); } colonVisible = !colonVisible; delay(pause); } //Convertiert binäre Zeichen in Dezimal Zeichen. byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) ); }
Video
Fazit
Das 4 Digit & 7 Segment Display mit TM1637 Chip ist recht einfach an den Arduino UNO anzuschließen und mit der richtigen Bibliothek zu programmieren. Die vier Stellen reichen aus um eine Uhrzeit anzuzeigen. Wenn mehr angezeigt werden soll, so musst du entweder auf ein zweites zurückgreifen oder aber eines mit mehr Digits*.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Es gibt auch Module, welche neben einer Segmentanzeige zusätzlich auch Taster besitzt, um andere Aktoren & Sensoren zu schalten.
‘class TM1637Display’ has no member named ‘setColon’
Ich habe die von dir verlinkte Bibliothek verwendet
Hi,
stimmt hier wird eine andere Bibliothek verwendet, ich habe das Tutorial angepasst.
Gruß,
Stefan
Beispiel 3 funktioniert trotzdem nicht. Selber Fehler
Hallo Svenja,
ich habe dir eine E-Mail gesendet. Vieleicht finden wir den Fehler ja zusammen.
Gruß,
Stefan
Hatte das gleiche Problem. Es gibt verschiedene Versionen der Bibliothek. Mit der Folgenden hat es dann funkioniert:
https://github.com/chamie/TM1637
Gruss Robert
Hallo Robert,
das ist wohl richtig. Daher habe ich das Beispiel 3 angepasst und einen Link zu einer anderen Bibliothek gesetzt.
Gruß,
Stefan
Hi
also ich kann machen was ich will, ich bekomme keinen Doppelpunkt angezeigt. Hab auch schon andere Libraries getestet, ohne Erfolg. Gibt’s nen Trick? mir würde auch einer ohne blinken genügen. 🙂
Hi,
hast du die richtige Bibliothek? Es gibt 2 verschiedene einmal eine welche diesen Doppelpunkt unterstützt und einmal ohne.
Welchen Microcontroller verwendest du?
Sende mir doch mal deinen Quellcode per E-Mail an info@draeger-it.blog.
Gruß,
Stefan
Hallo,
Wie kann ich mit dem TM1637 Display Temperaturen anzeigen, welche auch unter null Grad Celsius gehen?
Da muss ja dann auch ein minus Symbol angezeigt werden.
Ist so etwas auch in der Bibliothek hinterlegt?
Gruß,
Ralph
Hi,
das “minus” Symbol ist nicht direkt hinterlegt, jedoch kannst du die einzelnen Segmente einer 7 Segmentanzeige (davon sind 4 Stck. vorhanden) manipulieren. Somit würde ich dir empfehlen das erste Segment für das minus zuverwenden und die restlichen 3 für die die Temperatur. Somit springt die Zahl nicht von links nach rechts.
Gruß,
Stefan Draeger
Hallo, Mangels Programmierkenntnisse gelang es mir nicht, meiner Uhr (NANO;TM1637;RTC.Tiny mit DS18B (geht schon) auch die Temperaturanzeige zu “entlocken”. Bitte um Hilfe mit einer Quelle für
eine funktionsfähigen Sketch.Danke und Guten Abend
Hallo,
leider kann ich deinem Problem nicht ganz folgen.
Bitte sende mir doch eine Nachricht per E-Mail an info@draeger-it.blog mit einer genauen Schilderung inkl. deinen Bauteilen / Shields / Modulen welche du verwendest.
Gruß,
Stefan Draeger