Étape 5: Code d’Arduino
Enfin, le code qui utilise une puce de CCF pour régler l’heure sur le plateau, puis calcule la date de Julian et de celui fonctionne où dans les deux tours de Tzolkin le jour tombe. Il écrit ensuite la séquence de bits appropriés dans les registres à décalage. Il s’agit de mon premier programme Arduino, et je me suis appuyé fortement sur les sources de référencés et le cookbook Arduino pour l’assembler.Code :
/ * Avec grâce aux sources suivantes pour les pièces de ce code et les ressources :
Aire de jeu pour la bibliothèque : http://www.arduino.cc/playground/Code/Time
Puce de CCF : https://www.sparkfun.com/products/99
calcul des jours : http://arduino.cc/forum/index.php?topic=94925.0
Définition : La date de Julian (JD) est un compte continu des jours depuis le 1er janvier 4713.
*/
#include < Time.h > //include bibliothèques nécessaires pour le calcul du temps
#include < Wire.h >
#include < DS1307RTC.h > / / une base bibliothèque DS1307 qui retourne le temps comme un time_t
int dataPin = 2 ; définir les Pins pour le registre à décalage
int clockPin = 3 ;
int latchPin = 4 ;
int seqtzn1 [] = {128,64,32,16,8,4,2,1,0,0,0,0,0}; //arrays contrôlant les LEDs
int seqtzn2 [] = {0,0,0,0,0,0,0,0,128,64,32,16,8} ;
int seqtzds1 [] = {128,64,32,16,8,4,2,1,0,0,0,0,0,0,0,0,0,0,0,0} ;
int seqtzds2 [] = {0,0,0,0,0,0,0,0,128,64,32,16,8,4,2,1,0,0,0,0} ;
int seqtzds3 [] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,64,32,16} ;
void setup()
{
Serial.Begin(9600) ; établir une communication série sur ordinateur
pinMode (dataPin, sortie) ; modes de mettre broche
pinMode (latchPin, sortie) ;
pinMode (clockPin, sortie) ;
setSyncProvider(RTC.get) ; la fonction permettant d’obtenir le temps du CCF
if(timeStatus()! = timeSet)
Serial.println ("Impossible de synchroniser avec le CCF") ;
d’autre
Serial.println ("CCF a définir l’heure système") ;
}
void loop()
{
calculer Date de Julian et les deux numéros de Tzolkin en utilisant les fonctions ci-dessous
jd long = JulianDate() ;
tzn int = TzolkinNumber(jd) ;
TZD int = TzolkinDaysign(jd) ;
Serial.println(JD) ;
Serial.println(tzn) ;
Serial.println(TZDs) ;
Envoyer des données de registres à décalage
digitalWrite (latchPin, basse) ; loquet de traction faible commencer à envoyer des données
shiftOut (dataPin, clockPin, LSBFIRST, seqtzds3[tzds]) ;
shiftOut (dataPin, clockPin, LSBFIRST, seqtzds2[tzds]) ;
shiftOut (dataPin, clockPin, LSBFIRST, seqtzds1[tzds]) ;
shiftOut (dataPin, clockPin, LSBFIRST, seqtzn2[tzn]) ; Envoyer les données
shiftOut (dataPin, clockPin, LSBFIRST, seqtzn1[tzn]) ;
digitalWrite (latchPin, HIGH) ; loquet de traction haute cesser d’envoyer des données
Delay(300000) ; Patientez quelques instants avant de répéter
}
calcul de Julian date jd
long JulianDate() {}
time_t t = now() ; stocker l’heure durant la variable t
int todayDay = day(t) ; la journée pour le temps donné t
int todayMonth = month(t) ; le mois pour l’instant donné t
int todayYear = year(t) ; l’année pour le temps donné t
long des siècles = todayYear/100 ;
saute depuis longtemps = siècles/4 ;
leapDays long = 2 - siècles + sauts ; Remarque est négatif!!
yearDays long = 365,25 * (todayYear + 4716) ; jours, jusqu’au 1 janvier de cette année
long monthDays = 30.6001* (todayMonth + 1) ; jours jusqu'à 1 mois
entraîner longtemps = leapDays + todayDay + monthDays + yearDays-1524.5 ;
retourner le résultat ;
}
calculer les deux nombres de Tzolkin qui donnent la position en rotation du Tzolkin
int TzolkinNumber (long jd) {}
résultat int = (jd - 2456214) % 13 ; le nombre de jour du Tzolkin est calculé comme étant de 0 à 12
retourner le résultat ;
}
int TzolkinDaysign (long jd) {}
résultat int = (jd - 2456203) %20 ; calculer signe de Tzolkin jour 0 à 19 ans de 10.3.12 et numéro d’ordre 0 de wikipedia
retourner le résultat ;
}