Хочу обсудить возможные варианты расчета косательно дат, варианты библиотек и т.д
Функция возвращающая количество дней месяца:
Библиотеки: RTC lib может считать текущий день недели, разницу между датами,
if (!(now.unixtime() % 900)) {код} //каждые 15 минут(900 сек) выполняем код
int val = 1 - (dt.dayOfTheWeek() + !dt.dayOfTheWeek() * 7); // возвращает день недели от 1до7.
Библиотека TimeLord позволяет вычислить время заката и восхода исходя из местоположения и часового пояса
Хотелось бы еще формулу расчета дня недели, расчета дня недели начала месяца без библиотек.
Функция возвращающая количество дней месяца:
C++:
//Функция возвращает количество дней в месяце любого года с учетом высокосных лет
byte dayOfmonth(byte Month, int Year) {
Month += !Month - Month / 13; //если будет запрос на 0 или 13 месяц то будем считать для 1го и 12го
return !(Year % 4) * !(Month - 2) + 28 + ((0x3bbeecc >> (Month * 2)) & 3);
}
if (!(now.unixtime() % 900)) {код} //каждые 15 минут(900 сек) выполняем код
int val = 1 - (dt.dayOfTheWeek() + !dt.dayOfTheWeek() * 7); // возвращает день недели от 1до7.
Библиотека TimeLord позволяет вычислить время заката и восхода исходя из местоположения и часового пояса
C++:
TimeLord tardis;
tardis.TimeZone(Time_Zone); // tell TimeLord what timezone your RTC is synchronized to. You can ignore DST
tardis.Position(LATITUDE, LONGITUDE); // tell TimeLord where in the world we are
byte today[] = {0, 0, 12, 5, 12, 2020};
tardis.SunRise(today);//Время ВОСХОДА
char timeSun[14];
sprintf(timeSun, "%.2d:%.2d", today[tl_hour], today[tl_minute]);
Serial.println(timeSun);
tardis.SunSet(today);//Время ЗАКАТА
sprintf(timeSun, "%.2d:%.2d", today[tl_hour], today[tl_minute]);
Serial.print(timeSun);
Вложения
-
22.8 KB Просмотры: 6
-
4.9 KB Просмотры: 5