RTC alarm
Što ovaj primjer prikazuje
Postavlja vrijeme, datum i alarm na ugrađenom satu stvarnog vremena (RTC) PCF85063A, zatim jednom u minuti prikazuje vrijeme i ispisuje ALARM! kada se alarm aktivirao. Alarm je postavljen jednu minutu nakon početnog vremena.
Primjer koda
#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);
}
Skica sprema godinu kao 26, no rtc.setDate() očekuje punu godinu i od nje oduzima 2000, a rtc.getYear() vraća punu godinu. Zato godina na zaslonu neće biti 2026. Za ispravnu godinu predajte funkciji setDate() punu godinu (na primjer 2026) u varijabli tipa uint16_t.
Korištene funkcije
Inkplate()returns NoneStvara objekt Inkplate. Inkplate 7SPECTRA ima jedan šestobojni način rada, pa konstruktor ne prima argument načina rada.
ReturnsKonstruktor; nema povratne vrijednosti.
inkplate.begin()returns voidInicijalizira biblioteku, periferiju i međuspremnik slike. Pozovite je jednom u setup().
ReturnsNišta.
inkplate.rtc.reset()returns voidUpisuje zadanu vrijednost u prvi kontrolni registar RTC-a i briše postavke zaostale iz prethodne skice.
ReturnsNišta.
inkplate.clearDisplay()returns voidIspunjava međuspremnik slike bijelom bojom. Ne mijenja zaslon.
ReturnsNišta.
inkplate.setTextSize(uint8_t s)returns voidPostavlja povećanje teksta, ovdje 3.
ReturnsNišta.
inkplate.setTextColor(uint16_t c, uint16_t bg)returns voidPostavlja boju teksta i boju pozadine iscrtane iza svakog znaka, ovdje crvenu na bijeloj.
ReturnsNišta.
inkplate.rtc.setTime(uint8_t hour, uint8_t minute, uint8_t sec, bool isPM = false)returns voidUpisuje vrijeme u RTC. isPM se koristi samo u 12-satnom načinu rada.
ReturnsNišta.
inkplate.rtc.setDate(uint8_t weekday, uint8_t day, uint8_t month, uint16_t yr)returns voidUpisuje datum u RTC i označava ga kao postavljenog. Dan u tjednu 0 je nedjelja. yr je puna godina; funkcija oduzima 2000 prije upisa.
ReturnsNišta.
inkplate.rtc.setAlarm(uint8_t alarm_second, uint8_t alarm_minute, uint8_t alarm_hour, uint8_t alarm_day, uint8_t alarm_weekday)returns voidPostavlja vrijeme alarma i uključuje alarm.
ReturnsNišta.
inkplate.rtc.getRtcData()returns voidČita vrijeme i datum iz RTC-a; get funkcije u nastavku vraćaju vrijednosti koje je pročitala.
ReturnsNišta.
inkplate.rtc.getSecond()returns uint8_tVraća sekunde.
ReturnsSekunde.
inkplate.rtc.getMinute()returns uint8_tVraća minute.
ReturnsMinute.
inkplate.rtc.getHour()returns uint8_tVraća sate.
ReturnsSati.
inkplate.rtc.getDay()returns uint8_tVraća dan u mjesecu.
ReturnsDan u mjesecu.
inkplate.rtc.getWeekday()returns uint8_tVraća dan u tjednu, od 0 (nedjelja) do 6.
ReturnsDan u tjednu.
inkplate.rtc.getMonth()returns uint8_tVraća mjesec.
ReturnsMjesec, od 1 do 12.
inkplate.rtc.getYear()returns uint16_tVraća godinu: vrijednost spremljenu u RTC-u plus 2000.
ReturnsPuna godina.
inkplate.rtc.checkAlarmFlag()returns boolJavlja je li se alarm aktivirao.
Returnstrue kada se dosegne vrijeme alarma.
inkplate.rtc.clearAlarmFlag()returns voidBriše zastavicu alarma kako bi se mogao otkriti sljedeći alarm.
ReturnsNišta.
inkplate.setCursor(int16_t x, int16_t y)returns voidPostavlja mjesto na kojem počinje sljedeći ispisani tekst.
ReturnsNišta.
inkplate.print(value, format)returns size_tIspisuje tekst, znak ili broj u međuspremnik slike, poput Serial.print(). DEC ispisuje broj u decimalnom zapisu.
ReturnsBroj ispisanih bajtova.
inkplate.display(bool _leaveOn = 0)returns voidŠalje cijeli međuspremnik slike na zaslon i osvježava ga.
ReturnsNišta.
Što očekivati
Jednom u minuti zaslon se osvježi s vremenom i datumom crvenom bojom, u obliku HH:MM:SS Weekday, DD/MM/ iza kojeg slijedi godina, počevši od 12:51:10 Monday, 20/07/. Pri osvježavanju nakon vremena alarma ALARM! pojavljuje se niže na zaslonu. Skica ne ispisuje ništa u serijski monitor.
🔗Otvorite cijeli primjer
examples/Inkplate7SPECTRA/Advanced/RTC/Inkplate7SPECTRA_RTC_Alarm