Paso 10: El código avanzado: Descripción
Inicialmente el código establece una gran cantidad de variables y constantes. Define un número de macro especialmente para los comandos específicos del interruptor remoto. Lo hago es fácil cambiarlos en un lugar en caso de utiliza diferentes Switches.
En la configuración, configura el puerto serie y el tiempo. Entonces lee la EEPROM del módulo RTC para ver si en el encendido, algunas luces o dispositivos deben funcionar y lo hace. Esto lo hago en el caso de una interrupción de energía y reiniciar, el controlador aún sabe lo que debe estar encendido y lo que no.
El bucle comprueba el puerto Serial de entrada (a partir de un módulo de bluetooth) y toma acción si se encuentra la entrada. Si no actualiza el tiempo.
Entonces básicamente lo que hace es recorrer una serie de declaraciones de IF para ver si es el momento para la acción, interruptor un dispositivo encendido o apagado
Si un dispositivo tiene que estar encendido, salta a la subrutina/función correspondiente, envía el comando específico y actualiza el statusflag y escribe en la EEPROM. Envía el comando específico mediante una macro como "HuiskamerAAN" (en salón). usted necesita asegurarse de que la definición de la Macro coincide con el comando que su interruptor de control remoto.
Disculpas para guardar la macro definiciones en holandés, pero ya usé el término en inglés para las funciones: es decir, la función 'LivingRoomON' usa la macro "HuiskamerAAN". En las definiciones de Macro usted encontrará exactamente lo que es lo que en inglés.
Mientras que es bucle, el programa también continuamente comprueba si tal vez ya es la fecha correcta para DaylightSavingstime o, si ya es DST, ya sea la fecha correcta para apagar.
También realiza un seguimiento de qué fecha es así que puede hacer una aproximación del tiempo de la puesta del sol y el amanecer. Enciende la luz en la sala de estar cerca de la mitad una hora antes del atardecer, a menos que ya esté oscuro cuanto antes (cielo cubierto, trueno,) entonces se enciende las luces antes.
Esto logra mediante la lectura de una LDR. Es necesario establecer el nivel para a su propia situación.
Con respecto a la DST cálculo y aproximación de la salida del sol, estas son válidas para mi ubicación (en NW Europa) necesita adaptarse a los de su situación (y tal vez no tienes DST)
Con respecto a las variables de tiempo como una llamada "now.minute()' Lee la RTC enseguida.
Sin embargo dejo el bucle de constante actualización de las variables de tiempo como esta:
j = now.year();
mo = now.month();
d = now.day();
h = now.hour();
m = now.minute();
s = now.second();
Así que durante todo el programa está bien usar 'h' o 'now.hour()' para obtener la hora.
La única diferencia es que 'h' probablemente será un tadd más rápidamente que con 'now.hour()' pero 'h' puede ser una fracción de tiempo atrás. Creo que el loop es un ciclo de aproximadamente 150 veces por segundo por lo que si actualizo las variables al principio del bucle y usar hacia el final del bucle, podría requerírseme la 1/150 th de un segundo detrás. Realmente no parece un problema para mí