Paso 2: Código - general
Todo el código, con la excepción de menor de la rutina de availableMemory() pequeño, fue escrito totalmente desde cero por mi.
Originalmente pensé que la pieza de Tetris del código sería más complicada que la parte de hora. Yo podría no haber estado más equivocado. Tetris para Arduino fue un paseo de pastel en comparación con un reloj de alarma con todas las características de la escritura que quería. Descripciones de algunos de los temas de programación son en los próximos pasos.
Muchos parámetros son ajustables en el código. Son todo en la parte superior del archivo principal e incluyen:
-Todas las asignaciones de pin cable
-Por defecto de tiempo y ambas alarmas
-Constantes la frecuencia del zumbador de definir (por defecto 4 kHz)
-Tiempo de que la alarma se silencia cada vez que un botón es presionado (por defecto 30 s)
-Brillo de retroiluminación default 0-128 (por defecto 128)
Muchos parámetros son ajustables por el reloj de la misma:
-Si se utilizan piezas más gruesas o más pequeños
-Si 2 personajes personalizados se utilizan para las piezas y 6 para los escombros abajo o 4 y 4 se utilizan.
-Longitud de la repetición de minutos (por defecto 7 min)
-Longitud de la pausa en segundos (por defecto 30 seg para un total de 7 min 30 seg)
-Número de veces snooze se puede golpear antes de que usted debe despertar (por defecto 2)
-Golpear la repetición sea absoluta o relativa, si el tiempo de snooze es añadido a la hora de la alarma original o el tiempo el botón se golpea
-Cuántas líneas de Tetris deben ser limpiadas para declararse despierto (por defecto 4)
-Restaurar el reloj a su configuración predeterminada
-Activar extras como am/pm, día de la semana y que alarma se encuentra encendido y apagado
-Versión de software actual pantalla
-Guardar y restaurar la EEPROM
Muchos parámetros se guardan en la EEPROM para sobrevivir si poder nunca pierde completamente. Esto se guarda cada día a medianoche si cualquiera de los parámetros han cambiado. Incluyen:
-Hora (incluyendo el día de la semana) y dos alarmas
-Valor contraluz
Tetris - modo de funcionamiento (consulte el paso 3 para la descripción)
-Repetición variables
-Los extras sean on u off
-Cuántas líneas lleva a claro en Tetris para declarar usted mismo despierto
Tiempo de mantenimiento se hacen fácil gracias a la buena gente de implementación excelente de Arduino de la función millis(). Esa función se ejecuta en una interrupción y se hace para que no se pierda una garrapata. Todo lo que tengo que hacer es añadir periódicamente el tiempo transcurrido desde la última llamada de millis() la hora actual. Fácil como la empanada.
Que tire una maniobra interesante para atender el problema de vuelco millis(). La función millis() utiliza una variable larga sin signo y el de 32 bits significa que puede ir hasta 4294967295. Pero ya que están guardando un registro de milisegundos que rodará sobre cada 50 días o así. Esto no suele ser un problema pero puesto que este proyecto funciona continuamente y se basa en la función millis() necesitamos dar cuenta de ese desbordamiento. Lo que hago es vigilar la función millis() y cuando pasa la mitad, tome alguna acción. Cuando sea conveniente en el código (nada crítico está pasando) reste la mitad del valor total de la función millis() de la función sí mismo y de mi propio tiempo mantener variables. Así puede rodar justo pasado este a mitad de camino punto y cuando sea seguro disminuir la duración de la mitad de todo y rodar sobre. Es un poco difícil de explicar, examinar el código podría ayudar, pero funciona como un encanto.