Arduino schéma - arduino.sk

NTP server a letný čas pre Arduino Uno

Programovanie arduina
Príspevky: 74
Registrovaný: Štv 04. Dec 2014 22:15:58
Bydlisko: Banská Bystrica

NTP server a letný čas pre Arduino Uno

Poslaťod Robo Ulbricht » Štv 29. Dec 2016 23:59:22

Na Google+ prebehla diskusia o čase z NTP servera a jeho prípadnej konverzie do našej časovej zóny a správneho výpočtu letného času, tak som všetko zosumarizoval a dopísal vzorové algoritmy. Rovno upozorňujem na to, že AVR-LIBC 2.0 má v sebe chybu a letný čas počíta zle. Ale našiel som aj opravený algoritmus. Všetky zdrojáky sú pre 8bit AVR. Čiže Arduino Uno alebo mikrokontroléry ATmega a ATtiny.
  • time_avr_ntp - Nastavenie časovej zóny pre Slovensko.
  • time_avr_dst - Demonštrácia chybného výpočtu letného času v AVR-LIBC 2.0.
  • time_avr_dst_fixed - Správny algoritmus výpočtu letného času.

Komu stačí len správny algoritmus (autor je Edgar Bonet).
Kód: Vybrať všetko
int eu_dst(const time_t * timer, int32_t * z)
{
  uint32_t t = *timer;
  if ((uint8_t)(t >> 24) >= 194) t -= 3029443200U;
  t = (t + 655513200) / 604800 * 28;
  if ((uint16_t)(t % 1461) < 856) return 3600;
  else return 0;
}


Použije sa to takto.
Kód: Vybrať všetko
#include <time.h>

set_zone(1 * ONE_HOUR);
set_dst(eu_dst);


Popis
http://www.arduinoslovakia.eu/blog/2016/12/konverzia-casu-z-ntp-servera-pre-arduino-uno

Zdrojáky
https://github.com/RoboUlbricht/arduinoslovakia/tree/master/time

Späť na Software