Datum a čas (RTC)

Práce s datem a časem (RTC)

Každé Byzance zařízení je vybaveno obvodem pro udržování reálného času (RTC). Obsluha této funkce dodržuje standardy C++. Čas udržovaný v RTC obvodu je synchronizován automaticky pokaždé při připojení k portálu.

Čas je interpretován jako Unixové časové razítko (timestamp), které reprezentuje počet sekund uplynulých od 1.1. 1970. K obsluze tohoto času se využívají funkce ze standartní knihovny ctime.

Práci s Unix timestamp

#include "byzance.h"

// Init serial line
Serial pc(SERIAL_TX, SERIAL_RX);

// time object
time_t timestamp;

void init(){

    pc.baud(115200\);
    pc.printf("RTC test\n");

    // Set device time manualy
    timestamp = 1234567890;    
    set_time(timestamp);    
    pc.printf("Time set\n");
}

void loop(){

    // unix timestamp getter
    time(&timestamp);    
    pc.printf("Timestamp is %u\n",(unsigned int) timestamp);    
    Thread::wait(1000);
}

Vlastní časové pásmo a parsování timestamp do struktury

Časové razítko je v zařízení automaticky nastaveno nastaveno na UTC pásmo. Pro vlastní offset od UTC je třeba příslušnou položku změnit v command režimu bootloaderu. Nastavený offset se za běhu normálního programu dá získat pomocí veřejné funkce ''Byzance::get_timeoffset()''.

Byzance::get_timeoffset(&timeOffset);

Lokální čas se za běhu normálního programu dá získat pomocí veřejné funkce ''Byzance::get_localtime()''.

Byzance::get_localtime(&localTime);

Příklad "example_datetime" získá offset, UTC čas a lokální čas. Pokud je offset z portálu nastaven na nulu, UTC čas a lokální čas budou stejné.

example_datetime
#include "byzance.h"

int 	timeOffset;
struct	tm localTime;
struct	tm utcTime;

void loop(){

		Byzance::get_timeoffset(&timeOffset);
		printf("Time offset: %d\n",timeOffset);

		Byzance::get_datetime(&utcTime);
		printf("UTC Date: %02d/%02d/%04d \n", utcTime.tm_mday, utcTime.tm_mon+1, utcTime.tm_year+1900);
		printf("UTC time: %02d:%02d:%02d\n", (utcTime.tm_hour)%24, utcTime.tm_min, utcTime.tm_sec);

		Byzance::get_localtime(&localTime);
		printf("Local Date: %02d/%02d/%04d \n", localTime.tm_mday, localTime.tm_mon+1, localTime.tm_year+1900);
		printf("Local time: %02d:%02d:%02d\n", (localTime.tm_hour)%24, localTime.tm_min, localTime.tm_sec);

		ThisThread::sleep_for(1000);
}

K převodu jednotek je možné dále využít například jeden z mnoha online nástrojů.

Last updated