Zeit und Tem­pe­ra­tur auf einem 4-stel­li­gen 7-Seg­ment-Modul anzeigen

letz­te Aktua­li­sie­rung: 19. Aug 2024 @ 10:43

Biblio­thek TM1637 von AKJ

// benötigte Bibliotheken einbinden
#include "RTClib.h"

// Bibliothek TM1637 von AKJ
#include "TM1637.h"

// Name und Pins für das Anzeigemodul
TM1637 Anzeige(2, 3);

// Name des RTC-Moduls (rtc)
RTC_DS3231 rtc;

void setup() 
{
  Serial.begin(9600);

  // RTC-Modul starten
  rtc.begin();

  /*
    wenn Datum und Zeit nicht korrekt -> Datum/Zeit setzen
    Jahr, Monat, Tag, Stunde, Minute, Sekunde
    Beispiel:  2022 August 31. 10 Uhr 30 Minuten 30 Sekunden
    rtc.adjust(DateTime(2022, 8, 31, 10, 31, 30));
 */

  // 7-Segment-Modul starten
  Anzeige.begin();

  // Helligkeit setzen
  Anzeige.setBrightness(10);
}

void loop() 
{
  // speichern der Uhrzeit als String
  String Uhrzeit;

  /*
    rtc.now() -> aktuelle Zeit holen
    aktuell.hour() -> Stunde
    aktuell.minute() -> Minute
  */
  DateTime aktuell = rtc.now();

  // Format der Zeitangabe TM1637 festlegen
  char Zeit[] = "hhmm";

  // : einschalten
  Anzeige.colonOn();

  // char-Array in String umwandeln
  Uhrzeit = aktuell.toString(Zeit);

  // Uhrzeit anzeigen
  Anzeige.display(Uhrzeit);

  // : ausschalten
  Anzeige.colonOff();

  // Temperatur ermitteln und in String umwandeln
  String Temperatur = String(rtc.getTemperature());

  // Temperatur soll als Ganzzahl angezeigt werden
  // indexOf -> nach . suchen
  byte Suche = Temperatur.indexOf(".");

  // substring -> String an der Stelle des Punkts kürzen
  Temperatur = Temperatur.substring(0, Suche);

  // . durch , ersetzen
  Temperatur.replace(".", ",");

  // je nach Wert der Temperatur Leerzeichen an den Anfang setzen
  if (rtc.getTemperature() >= 10) Temperatur = "  " + Temperatur;
  if (rtc.getTemperature() < 10 && rtc.getTemperature() > 0) Temperatur = "   " + Temperatur;
  if (rtc.getTemperature() < 0 && rtc.getTemperature() > -10 ) Temperatur = " " + Temperatur;
  if (rtc.getTemperature() < -10 ) Temperatur = " " + Temperatur;

  // 2 Sekunde Pause
  delay(2000);

  // Anzeige löschen
  Anzeige.clearScreen();

  // Temperatur anzeigen
  Anzeige.display(Temperatur);
  delay(2000);
  Anzeige.clearScreen();
}

Biblio­thek TM1637_RT

// Bibliothek TM1637_RT
#include "TM1637Display.h"
#include "RTClib.h"

// Name des RTC-Moduls (rtc)
RTC_DS3231 rtc;

// Pins definieren
#define CLK 2
#define DIO 3

// Name des Displays und zugeordnete Pins
TM1637Display Anzeige(CLK, DIO);

// Array für das Grad-Zeichen
const byte GRAD[] = 
{
  SEG_A | SEG_F | SEG_G | SEG_B
};

void setup() 
{
  Anzeige.setBrightness(5);
  Anzeige.clear();

  // RTC-Modul starten
  rtc.begin();

  /*
    wenn Datum und Zeit nicht korrekt -> Datum/Zeit setzen
    Jahr, Monat, Tag, Stunde, Minute, Sekunde
    Beispiel:  2022 August 31. 10 Uhr 30 Minuten 30 Sekunden
    rtc.adjust(DateTime(2022, 8, 31, 10, 31, 30));
 */
}

void loop() 
{
  DateTime aktuell = rtc.now();

  /*
    Zeit formatieren
    wenn Stunde oder Minute < 10 -> führende 0 setzen
  */
  // Minuten
  if (aktuell.minute() < 10) Anzeige.showNumberDecEx(aktuell.minute(), 64, true, 4, 0);
  else Anzeige.showNumberDecEx(aktuell.minute(), 64, false, 4, 0);
  
  // Stunden
  if (aktuell.hour() < 10) Anzeige.showNumberDecEx(aktuell.hour(), 64, true, 2, 0);
  else Anzeige.showNumberDecEx(aktuell.hour(), 64, false, 2, 0);

  delay(2000);

  // Anzeige löschen
  Anzeige.clear();
  
  // Temperatur ermitteln und nach int umwandeln
  int Temperatur = int(rtc.getTemperature());

  /*
    Temperatur anzeigen: false -> keine führende 0, 3 -> 3. 
    Position, 0 -> rechtsbündig anordnen 
  */
  Anzeige.showNumberDec(rtc.getTemperature(), false, 3, 0);

  // Grad-Zeichen anzeigen
  Anzeige.setSegments(GRAD, 2, 3);

  delay(2000);
  Anzeige.clear();
}