RTC mjerač vremena
Što prikazuje ovaj primjer
Postavlja vrijeme i odbrojavanje od 30 sekundi na ugrađenom satu stvarnog vremena (RTC) PCF85063A, jednom u minuti prikazuje vrijeme na zaslonu i ispisuje Timer! crvenom bojom kad odbrojavanje istekne. Mjerač vremena koristi se samo jednom: skica ga isključuje nakon što se aktivirao.
Skica postavlja ESP32 GPIO 2, pin prekida RTC-a, 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
// Set clock
uint8_t hour = 12;
uint8_t minutes = 50;
uint8_t seconds = 30;
// 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 up a 30 seconds timer
int countdown_time = 30;
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.display(); // Put clear image on display
inkplate.setTextSize(4); // Set text to be 4 times bigger than classic 5x7 px text
pinMode(2, INPUT_PULLUP); // Set RTC INT pin on ESP32 GPIO2 as input with pullup resistor enabled
inkplate.rtc.setTime(hour, minutes, seconds); // Send time to RTC
inkplate.rtc.setDate(weekday, day, month, year); // Send date to RTC
// Set up a timer
/* source_clock
* RTC::TIMER_CLOCK_4096HZ -> clk = 4096Hz -> min timer = 244uS -> MAX timer = 62.256mS
* RTC::TIMER_CLOCK_64HZ -> clk = 64Hz -> min timer = 15.625mS -> MAX timer = 3.984s
* RTC::TIMER_CLOCK_1HZ -> clk = 1Hz -> min timer = 1s -> MAX timer = 255s
* RTC::TIMER_CLOCK_1PER60HZ -> clk = 1/60Hz -> min timer = 60s -> MAX timer = 4h15min
* value
* coundowntime in seconds
* int_enable
* true = enable interrupt; false = disable interrupt
* int_pulse
* true = interrupt generate a pulse; false = interrupt follows timer flag
*/
inkplate.rtc.timerSet(RTC::TIMER_CLOCK_1HZ, countdown_time, true, false);
}
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(60, 300); // Set position of the text
inkplate.setTextColor(INKPLATE_BLACK, INKPLATE_WHITE); // Set text color and background
printTime(hour, minutes, seconds, day, weekday, month, year); // Print the time on screen
if (inkplate.rtc.checkTimerFlag()) // Check if timer event has occurred
{
inkplate.rtc.clearTimerFlag(); // It's recommended to clear timer flag after timer has occurred
inkplate.rtc.disableTimer(); // Disable timer if you want to make it one time only. Is you want to be repeatable, comment this line
inkplate.setCursor(400, 400); // Set new position for cursor
inkplate.setTextColor(INKPLATE_RED, INKPLATE_WHITE); // Set text color and background
inkplate.print("Timer!");
}
inkplate.display(); // Do a full refresh
delay(60000); // Delay between refreshes.
}
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 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. Da biste dobili ispravnu godinu, funkciji setDate() proslijedite punu godinu (na primjer 2026) u varijabli tipa uint16_t.
Ovaj primjer koristi i pinMode() i delay(), koji su dio Arduino jezgre za ESP32 i dolaze s paketom pločice za ESP32 (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, 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 zzzaostale iz ranije 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 4.
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 postavljenim. Dan u tjednu 0 je nedjelja. yr je puna godina; funkcija oduzima 2000 prije upisa.
ReturnsNišta.
inkplate.rtc.timerSet(rtcCountdownSrcClock source_clock, uint8_t value, bool int_enable, bool int_pulse)returns voidPokreće odbrojavanje mjerača vremena. source_clock je takt mjerača vremena: RTC::TIMER_CLOCK_4096HZ, RTC::TIMER_CLOCK_64HZ, RTC::TIMER_CLOCK_1HZ (od 1 s do 255 s) ili RTC::TIMER_CLOCK_1PER60HZ (od 60 s do 4 h 15 min). value je odbrojavanje u jedinicama tog takta, dakle sekunde s TIMER_CLOCK_1HZ. int_enable true omogućuje mjaraču vremena da pokrene prekid RTC-a. int_pulse true čini prekid impulsom; false ga čini da prati zastavicu mjerača vremena. Skica prosljeđuje TIMER_CLOCK_1HZ, 30, true, false.
ReturnsNišta.
inkplate.rtc.getRtcData()returns voidČita vrijeme i datum iz RTC-a; get funkcije u nastavku vraćaju pročitane vrijednosti.
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.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: crno na bijelom za vrijeme, crveno na bijelom za poruku mjerača vremena.
ReturnsNišta.
inkplate.rtc.checkTimerFlag()returns boolJavlja je li mjerač vremena istekao. Ne briše zastavicu.
Returnstrue kad je zastavica mjerača vremena postavljena.
inkplate.rtc.clearTimerFlag()returns voidBriše zastavicu mjerača vremena kako bi se mogao otkriti sljedeći događaj mjerača vremena.
ReturnsNišta.
inkplate.rtc.disableTimer()returns voidZaustavlja mjerač vremena da se aktivira samo jednom. Uklonite ovaj redak iz skice ako želite da se mjerač vremena ponavlja.
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 prekida RTC-a, na INPUT_PULLUP.
ReturnsNišta.
delay(unsigned long ms)returns voidČeka zadani broj milisekundi, ovdje 60000 (jednu minutu).
ReturnsNišta.
Što očekivati
Prvi zaslon prikazuje vrijeme i datum crnom bojom u obliku HH:MM:SS Weekday, DD/MM/, a iza toga godinu. Pri osvježavanju minutu kasnije, nakon što je mjerač vremena od 30 sekundi istekao, Timer! pojavljuje se crvenom bojom niže na zaslonu, pored novog vremena. Skica ništa ne ispisuje u Serial Monitor.
🔗Otvorite cijeli primjer
examples/Inkplate7SPECTRA/Advanced/RTC/Inkplate7SPECTRA_RTC_Timer