Следующая часть функции Time Stamp. Вариант конвертации в переменную UNIX TIME.
Функция достаточно простая и без затей. Добавлена для полноты картины.
Проверялось здесь
Unix time конвертер
Первый вариант здесь.
Конвертация из UNIX TIME в понятные значения даты и времени.
unsigned long Time_Stamp_To_Value (uint16_t *data);
void setup() {
Serial.begin (9600);
}
void loop() {
uint16_t data[7] ={};
data[0] = 2024;
data[1] = 3;
data[2] = 7;
data[3] = 9;
data[4] = 0;
data[5] = 0;
unsigned long time_stamp = Time_Stamp_To_Value (data);
Serial.print ("con : ");
Serial.println ("1709802000");
Serial.print ("rel : ");
Serial.println (time_stamp);
Serial.println ("------------------------");
delay (15000);
}
unsigned long Time_Stamp_To_Value (uint16_t *data)
{
unsigned long month_comp = 0x11044C;
boolean vi_year = false;
uint8_t vi_days=0;
uint8_t fake_vi=0;
if (!(data[0] % 4))
{
vi_year = true;
month_comp = 0x110448;
if ( (!(data[0] % 100)) && (data[0] % 400) )
{
vi_year = false;
month_comp = 0x11044C;
}
}
unsigned int days = 0;
int i = (data[1]-1);
for ( ; i>0; i--)
{
days = days + (31 - (month_comp & 0x03));
month_comp = month_comp >> 2;
}
days = days + (data[2]-1);
unsigned int years = data[0] - 1970;
vi_days = (years + 2) / 4;
if (vi_year)
{
vi_days--;
}
i = data[0];
for ( ; i>2099; i--)
{
if ( (!(i % 100)) && (!(i % 4)) && (i % 400) )
{
fake_vi++;
}
}
vi_days = vi_days - fake_vi;
unsigned long value = ((unsigned long) (days*86400) + ((unsigned long)years*365*86400) +
((unsigned long)vi_days*86400) + ((unsigned long)data[3]*3600) +
(data[4]*60) + data[5]);
return (value);
}
Функция чтения Time Stamp 07. 03. 2024г. Nord_Air.
Эта программа является свободным ПО: вы можете распространять и/или модифицировать её
согласно условиям Основной Общественной Лицензии GNU, опубликованной Организацией Свободного Программного Обеспечения,
3-ей версии Лицензии, либо любой последующей версией.