RTC-Alarm
Was dieses Beispiel zeigt
Stellen Sie die Uhrzeit, das Datum und einen Alarm auf der integrierten Echtzeituhr (RTC) PCF85063A ein, zeigen Sie dann einmal pro Minute die Uhrzeit an und geben Sie ALARM! aus, sobald der Alarm ausgelöst wurde. Der Alarm wird eine Minute nach der Startzeit gesetzt.
Beispielcode
#include "Inkplate.h" // Include Inkplate library to the sketch
Inkplate inkplate; // Create an object on Inkplate library
// Set clock
uint8_t hour = 12;
uint8_t minutes = 51;
uint8_t seconds = 10;
// Set date and weekday (NOTE: In weekdays 0 means Sunday, 1 means Monday, ...)
uint8_t weekday = 1;
uint8_t day = 20;
uint8_t month = 7;
uint8_t year = 26;
// Set alarm time and date (alarm will be generated 60 seconds after board power up)
uint8_t alarmHour = 12;
uint8_t alarmMinutes = 52;
uint8_t alarmSeconds = 10;
uint8_t alarmWeekday = 1;
uint8_t alarmDay = 20;
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_RED, 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
inkplate.rtc.setAlarm(alarmSeconds, alarmMinutes, alarmHour, alarmDay, alarmWeekday); // Set alarm
}
void loop()
{
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(100, 300); // Set position of the text
printTime(hour, minutes, seconds, day, weekday, month, year); // Print the time on screen
if (inkplate.rtc.checkAlarmFlag()) // Check if alarm has occurred
{
inkplate.rtc.clearAlarmFlag(); // It's recommended to clear alarm flag after alarm has occurred
inkplate.setCursor(400, 400); // Set new position for cursor
inkplate.print("ALARM!");
}
inkplate.display(); // Do a full refresh
delay(60000); // Delay between refreshes one minute
}
void printTime(uint8_t _hour, uint8_t _minutes, uint8_t _seconds, uint8_t _day, uint8_t _weekday, uint16_t _month,
uint8_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. Auf dem Bildschirm steht das Jahr daher nicht als 2026. Um das richtige Jahr zu erhalten, übergeben Sie setDate() das vollständige Jahr (zum Beispiel 2026) in einer Variablen vom Typ uint16_t.
Verwendete Funktionen
Inkplate()returns NoneErstellt 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 voidInitialisiert die Bibliothek, die Peripherie und den Framebuffer. Rufen Sie sie einmal in setup() auf.
ReturnsNichts.
inkplate.rtc.reset()returns voidSchreibt den Standardwert in das erste Steuerregister der RTC und löscht so Einstellungen, die von einem früheren Sketch übrig geblieben sind.
ReturnsNichts.
inkplate.clearDisplay()returns voidFüllt den Framebuffer mit Weiß. Das Panel wird dadurch nicht verändert.
ReturnsNichts.
inkplate.setTextSize(uint8_t s)returns voidLegt die Textvergrößerung fest, hier 3.
ReturnsNichts.
inkplate.setTextColor(uint16_t c, uint16_t bg)returns voidLegt die Textfarbe und die hinter jedem Zeichen gezeichnete Hintergrundfarbe fest, hier Rot auf Weiß.
ReturnsNichts.
inkplate.rtc.setTime(uint8_t hour, uint8_t minute, uint8_t sec, bool isPM = false)returns voidSchreibt 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 voidSchreibt das Datum in die RTC und markiert es als gesetzt. Wochentag 0 ist Sonntag. yr ist das vollständige Jahr; die Funktion zieht vor dem Schreiben 2000 ab.
ReturnsNichts.
inkplate.rtc.setAlarm(uint8_t alarm_second, uint8_t alarm_minute, uint8_t alarm_hour, uint8_t alarm_day, uint8_t alarm_weekday)returns voidLegt die Alarmzeit fest und aktiviert den Alarm.
ReturnsNichts.
inkplate.rtc.getRtcData()returns voidLiest Uhrzeit und Datum aus der RTC; die folgenden get-Funktionen geben die gelesenen Werte zurück.
ReturnsNichts.
inkplate.rtc.getSecond()returns uint8_tGibt die Sekunden zurück.
ReturnsSekunden.
inkplate.rtc.getMinute()returns uint8_tGibt die Minuten zurück.
ReturnsMinuten.
inkplate.rtc.getHour()returns uint8_tGibt die Stunden zurück.
ReturnsStunden.
inkplate.rtc.getDay()returns uint8_tGibt den Tag des Monats zurück.
ReturnsTag des Monats.
inkplate.rtc.getWeekday()returns uint8_tGibt den Wochentag zurück, 0 (Sonntag) bis 6.
ReturnsWochentag.
inkplate.rtc.getMonth()returns uint8_tGibt den Monat zurück.
ReturnsMonat, 1 bis 12.
inkplate.rtc.getYear()returns uint16_tGibt das Jahr zurück: den in der RTC gespeicherten Wert plus 2000.
ReturnsVollständiges Jahr.
inkplate.rtc.checkAlarmFlag()returns boolMeldet, ob der Alarm ausgelöst wurde.
Returnstrue, sobald die Alarmzeit erreicht ist.
inkplate.rtc.clearAlarmFlag()returns voidLöscht das Alarm-Flag, damit der nächste Alarm erkannt werden kann.
ReturnsNichts.
inkplate.setCursor(int16_t x, int16_t y)returns voidLegt fest, wo der nächste ausgegebene Text beginnt.
ReturnsNichts.
inkplate.print(value, format)returns size_tGibt Text, ein Zeichen oder eine Zahl in den Framebuffer aus, ähnlich wie Serial.print(). DEC gibt eine Zahl dezimal aus.
ReturnsAnzahl der ausgegebenen Bytes.
inkplate.display(bool _leaveOn = 0)returns voidSendet den gesamten Framebuffer an das Panel und aktualisiert es.
ReturnsNichts.
Was Sie erwarten können
Einmal pro Minute wird der Bildschirm mit Uhrzeit und Datum in Rot aktualisiert, in der Form HH:MM:SS Weekday, DD/MM/ gefolgt vom Jahr, beginnend mit 12:51:10 Monday, 20/07/. Bei der Aktualisierung nach der Alarmzeit erscheint ALARM! weiter unten auf dem Bildschirm. Der Sketch gibt nichts im Serial Monitor aus.
🔗Vollständiges Beispiel öffnen
examples/Inkplate7SPECTRA/Advanced/RTC/Inkplate7SPECTRA_RTC_Alarm