Paso 2: El programa explicando
En primer lugar debo señalar que no soy muy bueno en la programación, sin embargo yo he mejorado! Mi primer intento de un reloj binario fue muy largo aliento, y he conseguido mejorar considerablemente el código.
Así que lo primero que hacemos es leer la hora, que es muy fácil.
(RTC.read(tm))
Luego la parte siguiente es tomar cada valor y dividirlo en unidades y decenas y si el valor es menos de 10 entonces las decenas valoran cero. Esta rutina se ejecuta 3 veces para las horas minutos y segundos.
void binaryOutput(int number)
{
Si (número > = 10)
{
int decenas = número/10;
int unidades = número - (decenas * 10);
setBinary(units,ROW);
FILA = FILA + 1;
setBinary(tens,ROW);
}
otra cosa
{
int decenas = 0;
int unidades = número;
setBinary(ROW,units);
FILA = FILA + 1;
setBinary(ROW,tens);
}
}
Usted debe ser capaz de ver una vez que han dividido el número en decenas y unidades luego ejecutar otra rutina para mostrar el valor en una columna. Esta rutina toma el 0-9 número y lo convierte en un número binario y encender (y apagar) el LED requiere
Esta parte del programa fue la broca que mejoró mucho desde el último intento! Básicamente se trata cada fila la misma independiente de la cantidad de LED en la fila. que significa que las filas de las unidades tienen 4 LED y la hora decenas sólo tiene dos LED pero funciona aunque la misma rutina, el Funduino no sabe que allí no es un LED en la posición de cualquier manera el LED se fijaría en off.
void setBinary (int valor, int whichRow)
{
FILA = whichRow;
int XYZ = 8;
int COL = 3;
para (int i = 0; i < 4; i ++)
{
getColor(g);
Si (valor > = XYZ)
{
Colorduino.SetPixel(ROW,COL,A,B,C);
valor = valor - XYZ;
}
otra cosa
{
Colorduino.SetPixel(ROW,COL,0,0,0);
}
XYZ = XYZ / 2;
COL = COL - 1;
}
}
¿Cómo funciona este pedacito de código?? La rutina se suministra con dos piezas de datos, que fila y el número. XYZ se establece inicialmente en 8 y COL la posición 3. Para luego obtener el código de color y hacer loops de 4, en cada bucle comparar su número con XYZ y determinar si es más, si más a continuación, debe activar el LED superior (el número 8 led!) Luego debe restarse 8 de su número. Si su no mayor de 8 entonces el LED superior deberán estar apagado. En ambos casos usted entonces XYZ divide por 2 y disminuir la COL. luego bucle otra vez este tiempo comprobar si su número es mayor que 4 y así sucesivamente. Vea a continuación un ejemplo.
El número es 6.
¿Loop1 (número de entrada = 6, XYZ = 8, Col = 3) es igual o más de 8? NO apagar top luz, mitad el XYZ, disminuir el Col.
¿Loop2 (número de entrada = 6, XYZ = 4, Col = 2) es igual o más de 4? Si enciende la luz 3, restar 4 del número, mitad de XYZ y decremento de la Col.
¿Loop3 (número de entrada = 2, XYZ = 2 Col = 1) es igual o más de 2? Si enciende la luz 2, reste 2 del número, mitad de XYZ y decremento de la Col.
¿Loop4 (número de entrada = 0, XYZ = 1, Col = 0) es igual a o más de 1? NO apague la luz de fondo, mitad el XYZ y disminuir la Col
En este punto puede entonces incrementa el reset de la fila el XYZ y Col y hacer la misma rutina para las decenas. Repita para los minutos y horas.
Por último el código entonces tiene que "Voltear" la página de Colorduino para mostrar el nuevo tiempo, o si el tiempo no ha cambiado entonces cambiar el color.
void loop()
{
tmElements_t tm;
Si (RTC.read(tm))
{
binaryOutput (tm. En segundo lugar);
FILA = FILA + 1;
binaryOutput (tm. Minuto);
FILA = FILA + 1;
binaryOutput (tm. Hora);
FILA = 0;
}
Colorduino.FlipPage();
}
Por lo que encarga de la lectura y visualización de la hora, ahora vamos a echa un vistazo a los colores. Cada columna se establece en un color y la siguiente columna se cambia por un valor de determinar por el "incremento" cuanto mayor sea el número mejor el color variación sobre las 6 columnas. He encontrado que alrededor de 8-12 es un buen número. El color se decide por una rutina que toma se incrementa el valor de "g" (entonces llamada arco iris) un color, otro es disminuye y la 3ª se establece en cero, este entonces ciclos hacia arriba y hacia abajo a través de todos los colores y da un efecto agradable del arco iris (ver la gráfica para una mejor explicación). Un problema que he tenido que tuvo mucho tiempo para elaborar la soloution muy simple era cómo hacer el arco iris se mueven lentamente a través de las columnas. porque he caminado el color entre cada fila, si ahora quiero incrementar cada columna por sólo 1 entonces tengo que tener en cuenta que el número original de color era y restablece "g" a ese número luego agrega uno. Creo que tiene sentido.
Así que lo último es cómo ajustar la hora???
No estaba muy seguro de cómo iba a ajustar este reloj cuando empecé a construir este reloj, pero porque hay no hay entradas en el tablero de colorduino, hice un reloj GPS que se puede conectar la unidad de RTC y corregir el tiempo. Voy a añadir otro instructivo sobre cómo hice esto!!