Quelle est la meilleure façon de convertir la date, les heures, les minutes et les secondes en horodatage Unix en millisecondes dans Arduino? J'ai besoin de cette conversion, car j'utilise RTC (date, heures, min, secondes, etc.) et communique l'horodatage Unix sur BLE
J'ai trouvé un extrait de code en ligne, mais je ne l'ai pas encore testé de manière approfondie.
byte second = epoch%60; epoch /= 60;
byte minute = epoch%60; epoch /= 60;
byte hour = epoch%24; epoch /= 24;
unsigned int years = epoch/(365*4+1)*4; epoch %= 365*4+1;
unsigned int year;
for (year=3; year>0; year--)
{
if (epoch >= days[year][0])
break;
}
unsigned int month;
for (month=11; month>0; month--)
{
if (epoch >= days[year][month])
break;
}
year = years+year;
month = month+1;
unsigned int day = epoch - days[year][month]+1;
unsigned int weekday = (dayOfMonth += month < 3 ? year-- : year - 2, 23*month/9 + dayOfMonth + 4 + year/4- year/100 + year/400)%7;
Et pour convertir en horodatage Unix:
unsigned long epoch = (((year/4*(365*4+1)+days[year%4][month]+dayOfMonth)*24+hour)*60+minute)*60+second;
Existe-t-il une bibliothèque dans Arduino qui implémente cela? J'échangerais la fiabilité sur la taille du programme.
Il existe une méthode standard pour effectuer ces conversions en C, à travers les fonctions définies dans
<time.h>
. Cette API étant standard, vous pouvez la tester sur votre ordinateur. Les versions récentes de avr-libc le supportent: voir time.h dans avr-libc . Ces fonctions peuvent gérer l'heure locale si vous fournissez une fonction implémentant les règles DST: voirset_dst()
. Des exemples sont fournis pour les règles américaines et européennes.la source
Voici un exemple pour convertir des secondes (heure Unix) en date et heure en utilisant TimeLib.h:
la source
Tout compilateur c à moitié décent aurait un ensemble de types et de routines liés au temps pour gérer cela. Consultez votre manuel compiker pour plus de détails.
Btw, contrairement à la sagesse conventionnelle, vous n'avez pas besoin d'un etc pour suivre le temps. Toute bonne minuterie plus ancienne et votre code feront l'affaire.
la source