Paso 5: Código de Arduino
Finalmente, el código que utiliza un chip RTC para ajustar la hora en el tablero, luego calcula la fecha juliana y de eso resulta que en las dos rotaciones del Tzolkin el día cae. Luego escribe la secuencia de bits correspondientes a los registros de cambio. Este es mi primer programa de Arduino y apoyó mucho en las fuentes de referencias y el recetario de Arduino para poner juntos.Código:
/ * Gracias a las siguientes fuentes para partes de este código y recursos:
Biblioteca de tiempo de juegos: http://www.arduino.cc/playground/Code/Time
Chip RTC: https://www.sparkfun.com/products/99
cálculo de los días: http://arduino.cc/forum/index.php?topic=94925.0
Definición: La fecha Julian (JD) es una cuenta continua de días a partir de 01 de enero de 4713.
*/
#include < Time.h > //include las bibliotecas requeridas para el cálculo del tiempo
#include < Wire.h >
#include < DS1307RTC.h > / / una biblioteca básica de DS1307 que devuelve la hora como un time_t
int dataPin = 2; definir pines para el registro de desplazamiento
clockPin int = 3;
int latchPin = 4;
int seqtzn1 [] = {128,64,32,16,8,4,2,1,0,0,0,0,0}; //arrays controlar los 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); configurar la comunicación serial a la computadora
pinMode (dataPin, salida); modos de juego pin
pinMode (latchPin, salida);
pinMode (clockPin, salida);
setSyncProvider(RTC.get); la función para obtener la hora del RTC
if(timeStatus()! = ajuste del horario)
Serial.println ("no se puede sincronizar con el RTC");
otra cosa
Serial.println ("RTC ha establecido la hora del sistema");
}
void loop()
{
calcular Julian Date y los dos números del Tzolkin usando funciones de abajo
jd largo = JulianDate();
tzn int = TzolkinNumber(jd);
Las TZD int = TzolkinDaysign(jd);
Serial.println(JD);
Serial.println(TZN);
Serial.println(tzds);
enviar datos a los registros
digitalWrite (latchPin, bajo); cierre de tracción baja comience a enviar datos
shiftOut (dataPin, clockPin, LSBFIRST, seqtzds3[tzds]);
shiftOut (dataPin, clockPin, LSBFIRST, seqtzds2[tzds]);
shiftOut (dataPin, clockPin, LSBFIRST, seqtzds1[tzds]);
shiftOut (dataPin, clockPin, LSBFIRST, seqtzn2[tzn]); enviar los datos
shiftOut (dataPin, clockPin, LSBFIRST, seqtzn1[tzn]);
digitalWrite (latchPin, HIGH); cierre de tracción alta dejar de enviar datos
Delay(300000); esperar un tiempo antes de repetir
}
cálculo de Julian fecha jd
largo JulianDate() {}
time_t t = now(); almacenar el tiempo actual en la variable de tiempo t
int todayDay = day(t); el día por el tiempo dado t
int todayMonth = month(t); el mes por el tiempo dado t
int todayYear = year(t); el año para el tiempo dado t
largos siglos = todayYear/100;
salto largo = siglos/4;
leapDays largo = 2 - siglos + saltos; Nota es negativa!!
yearDays largo = 365.25 * (todayYear + 4716); días hasta 1 ene este año
monthDays largo = 30.6001* (todayMonth + 1); días hasta 1 mes
resultar largo = leapDays + todayDay + monthDays + yearDays-1524.5;
volver a resultado;
}
cálculo de los dos números del Tzolkin que dan posición en rotación de Tzolkin
int TzolkinNumber (jd largo) {}
int resultado = (jd - 2456214) % 13; el número de días del Tzolkin se calcula como 0 a 12
volver a resultado;
}
int TzolkinDaysign (jd largo) {}
int resultado = (jd - 2456203) % 20; calcular signo de día Tzolkin 0 a 19 de 10.3.12 y número de orden 0 de wikipedia
volver a resultado;
}