Zum Hauptinhalt springen

RTC-Uhr

Was dieses Beispiel zeigt​

Stellt Uhrzeit und Datum auf der integrierten Echtzeituhr (RTC) PCF85063A ein, liest sie wieder aus und zeigt sie auf dem Bildschirm an. Der Bildschirm wird einmal pro Minute aktualisiert.

Beispielcode​

Select Board
Inkplate7SPECTRA_RTC_Simple.ino
#include "Inkplate.h" // Include Inkplate library to the sketch

Inkplate inkplate; // Create an object on Inkplate library

#define REFRESH_DELAY 60000 // Delay between refreshes one minute
unsigned long time1; // Time for measuring refresh in millis

// Set clock
uint8_t hour = 13;
uint8_t minutes = 0;
uint8_t seconds = 10;

// Set date and weekday (NOTE: In weekdays 0 means Sunday, 1 means Monday, ...)
uint8_t weekday = 1;
uint8_t day = 2;
uint8_t month = 2;
uint8_t year = 26;

void setup()
{
inkplate.begin(); // Init Inkplate library (you should call this function ONLY ONCE)
inkplate.rtc.reset(); // reset RTC if there is some data in it
inkplate.clearDisplay(); // Clear frame buffer of display
inkplate.setTextSize(3); // Set text to be 3 times bigger than classic 5x7 px text
inkplate.setTextColor(INKPLATE_BLACK, INKPLATE_WHITE); // Set text color and background

inkplate.rtc.setTime(hour, minutes, seconds); // Send time to RTC
inkplate.rtc.setDate(weekday, day, month, year); // Send date to RTC
getAndDisplayTime(); // Display time on the screen
}

void loop()
{
// Refresh screen every one minute
if ((unsigned long)(millis() - time1) > REFRESH_DELAY)
{
// Display time on the screen
getAndDisplayTime();

// Store current millis
time1 = millis();
}
}

void getAndDisplayTime()
{
inkplate.rtc.getRtcData(); // Get the time and date from RTC

seconds = inkplate.rtc.getSecond(); // Store senconds in a variable
minutes = inkplate.rtc.getMinute(); // Store minutes in a variable
hour = inkplate.rtc.getHour(); // Store hours in a variable
day = inkplate.rtc.getDay(); // Store day of month in a variable
weekday = inkplate.rtc.getWeekday(); // Store day of week in a variable
month = inkplate.rtc.getMonth(); // Store month in a variable
year = inkplate.rtc.getYear(); // Store year in a variable

inkplate.clearDisplay(); // Clear content in frame buffer
inkplate.setCursor(80, 300); // Set position of the text
printTime(hour, minutes, seconds, day, weekday, month, year); // Print the time on screen
inkplate.display(); // Refresh the screen
}

void printTime(uint8_t _hour, uint8_t _minutes, uint8_t _seconds, uint8_t _day, uint8_t _weekday, uint8_t _month,
uint16_t _year)
{
// Write time and date info on screen
char *wday[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

print2Digits(_hour);
inkplate.print(':');
print2Digits(_minutes);
inkplate.print(':');
print2Digits(_seconds);

inkplate.print(' ');

inkplate.print(wday[_weekday]);
inkplate.print(", ");
print2Digits(_day);
inkplate.print('/');
print2Digits(_month);
inkplate.print('/');
inkplate.print(_year, DEC);
}

void print2Digits(uint8_t _d)
{
if (_d < 10)
inkplate.print('0');
inkplate.print(_d, DEC);
}

Der Sketch speichert das Jahr als 26, aber rtc.setDate() erwartet das vollständige Jahr und zieht davon 2000 ab, und rtc.getYear() gibt das vollständige Jahr zurück. Das Jahr auf dem Bildschirm lautet daher nicht 2026. Um das richtige Jahr zu erhalten, übergeben Sie setDate() das vollständige Jahr (zum Beispiel 2026) in einer uint16_t-Variablen.

Verwendete Funktionen​

Inkplate()returns None

Erstellt das Inkplate-Objekt. Inkplate 7SPECTRA hat nur einen einzigen Sechs-Farben-Modus, daher benötigt der Konstruktor kein Modus-Argument.

ReturnsKonstruktor; kein Rückgabewert.

inkplate.begin()returns void

Initialisiert die Bibliothek, die Peripherie und den Framebuffer. Rufen Sie sie einmal in setup() auf.

ReturnsNichts.

inkplate.rtc.reset()returns void

Schreibt den Standardwert in das erste Steuerregister der RTC und löscht damit Einstellungen, die von einem früheren Sketch übrig geblieben sind.

ReturnsNichts.

inkplate.clearDisplay()returns void

Füllt den Framebuffer mit Weiß. Das Panel wird dadurch nicht verändert.

ReturnsNichts.

inkplate.setTextSize(uint8_t s)returns void

Legt die Textvergrößerung fest, hier 3.

ReturnsNichts.

inkplate.setTextColor(uint16_t c, uint16_t bg)returns void

Legt die Textfarbe und die Hintergrundfarbe hinter jedem Zeichen fest, hier Schwarz auf Weiß.

ReturnsNichts.

inkplate.rtc.setTime(uint8_t hour, uint8_t minute, uint8_t sec, bool isPM = false)returns void

Schreibt die Uhrzeit in die RTC. isPM wird nur im 12-Stunden-Modus verwendet.

ReturnsNichts.

inkplate.rtc.setDate(uint8_t weekday, uint8_t day, uint8_t month, uint16_t yr)returns void

Schreibt das Datum in die RTC und markiert es als eingestellt. Wochentag 0 ist Sonntag. yr ist das vollständige Jahr; die Funktion zieht vor dem Schreiben 2000 ab.

ReturnsNichts.

inkplate.rtc.getRtcData()returns void

Liest Uhrzeit und Datum aus der RTC; die folgenden get-Funktionen geben die gelesenen Werte zurück.

ReturnsNichts.

inkplate.rtc.getSecond()returns uint8_t

Gibt die Sekunden zurück.

ReturnsSekunden.

inkplate.rtc.getMinute()returns uint8_t

Gibt die Minuten zurück.

ReturnsMinuten.

inkplate.rtc.getHour()returns uint8_t

Gibt die Stunden zurück.

ReturnsStunden.

inkplate.rtc.getDay()returns uint8_t

Gibt den Tag des Monats zurück.

ReturnsTag des Monats.

inkplate.rtc.getWeekday()returns uint8_t

Gibt den Wochentag zurück, von 0 (Sonntag) bis 6.

ReturnsWochentag.

inkplate.rtc.getMonth()returns uint8_t

Gibt den Monat zurück.

ReturnsMonat, 1 bis 12.

inkplate.rtc.getYear()returns uint16_t

Gibt das Jahr zurück: den in der RTC gespeicherten Wert plus 2000.

ReturnsVollständiges Jahr.

inkplate.setCursor(int16_t x, int16_t y)returns void

Legt fest, wo der nächste ausgegebene Text beginnt.

ReturnsNichts.

inkplate.print(value, format)returns size_t

Gibt Text, ein Zeichen oder eine Zahl in den Framebuffer aus, wie Serial.print(). DEC gibt eine Zahl dezimal aus.

ReturnsAnzahl der ausgegebenen Bytes.

inkplate.display(bool _leaveOn = 0)returns void

Sendet den gesamten Framebuffer an das Panel und aktualisiert es.

ReturnsNichts.

Was Sie erwarten können​

Der Bildschirm zeigt Uhrzeit und Datum in Schwarz in der Form HH:MM:SS Weekday, DD/MM/ gefolgt vom Jahr an, beginnend mit 13:00:10 Monday, 02/02/, und wird einmal pro Minute mit der aktuellen Uhrzeit aktualisiert. Der Sketch gibt nichts im Serial Monitor aus.

🔗Vollständiges Beispiel öffnen

examples/Inkplate7SPECTRA/Advanced/RTC/Inkplate7SPECTRA_RTC_Simple

→