RTC alarm s prekidom
Što ovaj primjer prikazuje
Postavite vrijeme i alarm na ugrađenom satu stvarnog vremena (RTC) PCF85063A iz epoch vrijednosti, a zatim neka RTC signalizira alarm na svojem pinu za prekid. Skica jednom u minuti prikazuje vrijeme crvenom bojom, a ispisuje ALARM nakon što se izvrši njezina funkcija prekida. Alarm je postavljen 60 sekundi nakon početnog vremena.
Skica čita RTC prekid na ESP32 GPIO 2, pa taj pin postavlja kao ulaz s uključenim pull-up otpornikom.
Primjer koda
#include "Inkplate.h" // Include Inkplate library to the sketch
Inkplate inkplate; // Create an object on Inkplate library and also set library into 1-bit mode (BW)
volatile int _alarmFlag = 0; // Variable to store alarm flag
void IRAM_ATTR alarmISR() // This function will be called when alarm interrupt event happens
{ // NOTE: Function must be above setup() and loop()!
_alarmFlag = 1; // Set alarm flag
}
void setup()
{
pinMode(2, INPUT_PULLUP); // Set RTC INT pin on ESP32 GPIO2 as input with pullup resistor enabled
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.display(); // Put clear image on display
inkplate.setTextSize(3); // Set text to be 3 times bigger than classic 5x7 px text
// Set RTC time and date via Epoch
inkplate.rtc.setEpoch(1770032087);
// Set alarm using Epoch
inkplate.rtc.setAlarmEpoch(inkplate.rtc.getEpoch() + 60, RTC_ALARM_MATCH_DHHMMSS);
// inkplate.rtc.setTime(12, 40, 30); // Or you can use other way to set the time and date
// inkplate.rtc.setDate(1, 2, 2, 2026);
// inkplate.rtc.setAlarm(50, 40, 12, 2, 1); // Set alarm 20 seconds from now
attachInterrupt(2, alarmISR, FALLING); // Set interrupt function and interrupt mode
}
void loop()
{
inkplate.clearDisplay(); // Clear frame buffer of display
inkplate.setCursor(60, 100); // Set position of the text
inkplate.setTextColor(INKPLATE_RED, INKPLATE_WHITE); // Set text color and background
inkplate.rtc.getRtcData(); // Get the time and date from RTC
// Print the time on screen
printTime(inkplate.rtc.getHour(), inkplate.rtc.getMinute(), inkplate.rtc.getSecond(), inkplate.rtc.getDay(), inkplate.rtc.getWeekday(), inkplate.rtc.getMonth(), inkplate.rtc.getYear());
if (_alarmFlag) // Check alarm flag
{
// _alarmFlag = 0; // Uncomment if you want to clear this flag
inkplate.rtc.clearAlarmFlag(); // It's recommended to clear alarm flag after alarm has occurred
inkplate.setCursor(200, 200); // Set position of the text
inkplate.print("ALARM"); // Print text
}
inkplate.display(); // Do a full refresh
delay(60000); // Wait one minute
}
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);
}
Skica ostavlja zakomentiranu liniju koja briše _alarmFlag. Nakon što se prekid izvrši, svako sljedeće osvježavanje ispisuje ALARM dok ne resetirate pločicu ili ne odkomentirate tu liniju.
Ovaj primjer koristi i pinMode(), attachInterrupt() i delay(), koji su dio Arduino jezgre za ESP32 i dolaze s paketom ESP32 pločica (arduino-esp32), a ne s bibliotekom Inkplate.
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, periferne jedinice 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.display(bool _leaveOn = 0)returns voidŠalje cijeli međuspremnik slike na zaslon i osvježava ga.
ReturnsNišta.
inkplate.setTextSize(uint8_t s)returns voidPostavlja povećanje teksta, ovdje 3.
ReturnsNišta.
inkplate.rtc.setEpoch(uint32_t _epoch)returns voidPostavlja vrijeme i datum RTC-a iz epoch vrijednosti (sekunde od 1. siječnja 1970.), ovdje 1770032087.
ReturnsNišta.
inkplate.rtc.getEpoch()returns uint32_tČita RTC i vraća njegovo vrijeme i datum kao epoch vrijednost. Skica joj dodaje 60 kako bi dobila vrijeme alarma.
ReturnsVrijeme RTC-a kao epoch vrijednost.
inkplate.rtc.setAlarmEpoch(uint32_t _epoch, uint8_t _match)returns voidPostavlja alarm na vrijeme zadano kao epoch vrijednost i omogućuje prekid alarma. _match je jedna od vrijednosti RTC_ALARM_MATCH_* iz biblioteke; skica prosljeđuje RTC_ALARM_MATCH_DHHMMSS (dan, sati, minute i sekunde). Ostale vrijednosti su RTC_ALARM_MATCH_SS, RTC_ALARM_MATCH_MMSS, RTC_ALARM_MATCH_HHMMSS i RTC_ALARM_MATCH_WHHMMSS.
ReturnsNišta.
inkplate.setCursor(int16_t x, int16_t y)returns voidPostavlja mjesto na kojem počinje sljedeći ispisani tekst.
ReturnsNišta.
inkplate.setTextColor(uint16_t c, uint16_t bg)returns voidPostavlja boju teksta i boju pozadine iscrtane iza svakog znaka, ovdje crveno na bijelom.
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.getHour()returns uint8_tVraća sate.
ReturnsSati.
inkplate.rtc.getMinute()returns uint8_tVraća minute.
ReturnsMinute.
inkplate.rtc.getSecond()returns uint8_tVraća sekunde.
ReturnsSekunde.
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 pohranjenu u RTC-u plus 2000.
ReturnsPuna godina.
inkplate.rtc.clearAlarmFlag()returns voidBriše zastavicu alarma u RTC-u kako bi se mogao otkriti sljedeći alarm.
ReturnsNišta.
inkplate.print(value, format)returns size_tIspisuje tekst, znak ili broj u međuspremnik slike, kao Serial.print(). DEC ispisuje broj u decimalnom zapisu.
ReturnsBroj ispisanih bajtova.
pinMode(uint8_t pin, uint8_t mode)returns voidPostavlja način rada GPIO pina. Skica postavlja GPIO 2, pin RTC prekida, na INPUT_PULLUP.
ReturnsNišta.
attachInterrupt(uint8_t pin, void (*function)(void), int mode)returns voidPokreće funkciju kad se pin promijeni. Skica pokreće alarmISR() kad GPIO 2 padne (FALLING), čime se postavlja _alarmFlag.
ReturnsNišta.
delay(unsigned long ms)returns voidČeka zadani broj milisekundi, ovdje 60000 (jedna minuta).
ReturnsNišta.
Što očekivati
Zaslon prikazuje vrijeme i datum crvenom bojom u obliku HH:MM:SS Weekday, DD/MM/, a iza toga godinu. Otprilike minutu poslije zaslon se osvježi trenutnim vremenom, a nakon što se aktivirao prekid alarma, ispod njega se pojavi ALARM. Skica ništa ne ispisuje na Serial Monitor.
🔗Otvorite cijeli primjer
examples/Inkplate7SPECTRA/Advanced/RTC/Inkplate7SPECTRA_RTC_Interrupt_Alarm