Reloj LCD con calendario hebreo fecha y un termómetro (4 / 7 paso)

Paso 4: Descripción de código

Nota: cuando digo "el reloj" me refiero al reloj entero como un sistema. Cuando digo "reloj de tiempo real", me refiero a solo el chip de reloj.

Para la fecha hebrea he utilizado el siguiente código de dominio público:

"Cálculos de calendario '' por Nachum Dershowitz y Edward M. Reingold, Software---práctica y experiencia, vol. 20, no. 9 (septiembre de 1990), págs. 899-928.

Código original

El código anterior se convierte entre la fecha Gregoriana que alimenta el reloj de tiempo real hasta la fecha hebrea. Actualmente contiene también las conversiones de calendario Julian, la musulmana y la ISO, así que usted puede utilizar estas si quieres. O se puede utilizar sin la conversión en todo.

Porque la conversión es muy lenta tuve que cambiar algunas líneas de código, para que no empieza a buscar los últimos años una y otra. Antes del cambio, conversión de la fecha tuvo casi 4 segundos y los segundos de reloj dentados. Porque es un reloj de la figura del año cambia una vez en un año (por supuesto). El código original es más genérico, se utiliza para convertir fechas diferentes, no relacionados. Pero en un reloj como mencioné, el año es casi constante, por lo que cambié el código por lo que en principio convierte una vez utilizando el método lento, pero en las siguientes conversiones utiliza el pasado aproximación de conversión del año para comenzar la búsqueda.

Otras bibliotecas se incluyen en el archivo zip.

Para evitar el uso de variables globales, las variables y clases que se salvaría su valor son estáticas. También, las clases que su tiempo de ejecución es largo fueron definidas como estáticos. El problema con este método es que la función setup() no puede acceder a las variables en la función loop() para tener que redefinirlos. Para evitar esta redundancia, se introduce la noción de máquina de estado.

El código está construido como una máquina de estado. Cada vez que se llama la función de bucle, el reloj está en un determinado Estado. Transición entre Estados se hacen según las reglas definidas. Por ejemplo, cuando el reloj se inicia, entra en INIT_STATE. Este estado se utiliza en lugar de utilizar la función setup(), por lo que pueden accederse a las variables loop().

Después de INIT_STATE el reloj entra en IDLE_STATE. Este estado es la posición inicial para todos otra transición de estado. El receptor IR se comprueba cada vez que el reloj está en estado inactivo. Esto no es óptimo, ya que si el reloj está en algún otro Estado, el control remoto no responde. Por ejemplo, el sensor de temperatura es acceso es relativamente lento. Durante la lectura de la temperatura, el receptor IR estará inactivo. Una mejor manera es utilizar interrupciones (como soy un novato, yo no sabía acerca de interrupciones hasta más tarde).

La temperatura se lee en READ_TEMP_STATE, y el tiempo se lee en READ_TIME_STATE. La tasa de este Estados está definida en el inicio del programa. Tiempo se lee cada 120milliseconds y temperatura se lee cada 2 segundos.

Otra cosa a notar es que la actualización de tiempo debe ser muy sincrónica. Todas las acciones mucho tiempo deben ocurrir después de que la figura de segundos fue actualizada. Lectura de la temperatura se hiciera inmediatamente después de la hora se actualiza. Deja el reloj un segundo a hacer otras cosas, hasta la próxima actualización del tiempo. Si vamos a READ_TEMP_STATE de IDLE_STATE, la lectura de temperatura podría ocurrir cuando necesitamos actualizar el tiempo y no va a cambiar la figura de segundos de reloj en un ritmo constante. En tal caso los segundos no marque en un regulat ritmo y resulta preocupante, que el reloj se ve muy agradable.

Lista de la biblioteca requiere:

  1. Biblioteca de sensor DHT
  2. LCD-I2C
  3. Arduino IRremote
  4. Biblioteca del DS1302 - incluido en mi archivo zip y aquí: Programación orientada a objetos DS1302
  5. Biblioteca de MP3 de coche - incluido en mi archivo zip
  6. Biblioteca de conversión de tiempo - incluido en mi archivo zip

Tenga en cuenta que la biblioteca DS1302 no es el archivo original, que lo cambié a una estructura de clase.

Artículos Relacionados

Termómetro interior/exterior reloj/Nixie de VFD Retro Fit Linden manto de reloj

Termómetro interior/exterior reloj/Nixie de VFD Retro Fit Linden manto de reloj

Me decidí a hacer algo que no había visto todavía y combinado (2) separar la electrónica usando pantallas de tubo de vacío de diferentes tipos (2) para hacer esta exhibición única. Nixie tubos para el termómetro y VFD (vacío flouresent pantalla) para
Arduino Nano: Leer múltiples DS1820/DS18S20 Maxim un alambre Termómetros con Visuino

Arduino Nano: Leer múltiples DS1820/DS18S20 Maxim un alambre Termómetros con Visuino

Una de las razones que los Termómetros DS18B20 OneWire Maxim DS1820 DS18S20 / / son tan populares es que varios termómetros pueden ser conectados e incluso funciona con sólo 2 hilos. Ya postee Instructables en cómo conectar un termómetro y cómo obten
El reloj de la historia: Arduino LCD con sensores de la tapa

El reloj de la historia: Arduino LCD con sensores de la tapa

Este es aún otro Arduino LCD reloj, pero con un giro; Este reloj sabe algunas fiestas y cumpleaños, realizar cálculos sobre la marcha de a qué edad una persona es y entonces Mostrar la información en la pantalla LCD. Me inspiré a hacer este reloj por
Hermoso y práctico reloj con calendario

Hermoso y práctico reloj con calendario

Utilice I2C_LCD para hacer un hermoso y práctico reloj con calendario.I2C_LCD puede Mostrar mapa de bits, gráficos y caracteres, puede hacer hermosa interfaz de usuario para su proyecto con I2C_LCD.Estoy seguro que va a interesar en este trabajo.Los
Reloj con termómetro usando Arduino i2c 16 x 2 lcd, RTC DS1307 y DHT11 sensor.

Reloj con termómetro usando Arduino i2c 16 x 2 lcd, RTC DS1307 y DHT11 sensor.

Hello! Ya ha pasado un tiempo no me he posteado nada en Instructables, pero ahora hice un simple proyecto que he visto en internet en varias formas. He conseguido crear un código con otros códigos que he encontrado en internet y tengo que decir es tr
Reloj despertador con Evive

Reloj despertador con Evive

Queremos hacer un reloj de alarma analógico y digital combinado. Reloj de tiempo real es esencial para el reloj mantener el tiempo, incluso si está apagada. Pero comúnmente disponibles tableros de microcontrolador como Arduino o frambuesa Pi no tiene
Completo reloj Digital con Sensor de presencia (RTC - alarma - PIR - temperatura - humedad - punto de rocío)

Completo reloj Digital con Sensor de presencia (RTC - alarma - PIR - temperatura - humedad - punto de rocío)

HolaYa he hecho algunos proyectos de relojes digitales con Arduino como pantallas LED y LCD, pero este es más especial porque he introducido una novedad con un sensor de movimiento (PIR).Ver VIDEOCaracterísticas principalesPIR (Sensor infrarrojo de p
BRICOLAJE TV de pantalla LCD con Arduino y mando a distancia inteligente

BRICOLAJE TV de pantalla LCD con Arduino y mando a distancia inteligente

En los pasos siguientes, usted hacer un DIY "TV" con el código para un smart remote y realmente vídeos y posiblemente incluso conectar el mando a distancia inteligente a la placa de base real.Materiales:Espejo de papelEstabilizador sólido y no f
Cómo interfaz 16 X 2 LCD con el Microcontrolador AVR

Cómo interfaz 16 X 2 LCD con el Microcontrolador AVR

aquí está el diagrama del circuito de interface 16 X 2 LCD al Microcontrolador AVR. En este circuito, el oscilador de cristal dará el reloj en el microcontrolador. Los condensadores conectados a la voluntad de cristal actúan como filtros y ayudar el
Usted mismo hacer un reloj casero con termómetro usando ATMEGA128

Usted mismo hacer un reloj casero con termómetro usando ATMEGA128

en este paso a paso quiero compartir mi experiencia con temporizador ATMEGA128 e interrumpir con DS1307 y NTC casero reloj y termómetro.Muestra hora, minutos, segundos, día de la semana, día de mes, mes y año y la temperatura en grados CelsiusDisfrut
Arduino LCD termómetro / control de temperatura con sensor de temperatura TMP36GZ añadido 2 relé de chanel, agregó RTC ds1307, añadido un case.based en la guía de WWC.

Arduino LCD termómetro / control de temperatura con sensor de temperatura TMP36GZ añadido 2 relé de chanel, agregó RTC ds1307, añadido un case.based en la guía de WWC.

HY mi primer guid basado en la guía de WWC.03 de octubre de 2013 agregado caso (Paso 13)23 de septiembre de 2013 ha añadido RTC (realtimeclock) Ds1307 (paso 11)13 de septiembre de 2013 ha añadido 2 relé de chanel apagar la lámpara de calefacción. (pa
Entretela de 16 x 2 LCD con msp430 launchpad en modo 4 bits

Entretela de 16 x 2 LCD con msp430 launchpad en modo 4 bits

en este instructable escribo entretela de unos 16 x 2 LCD con microcontrolador msp430g2553. Si no sabes sobre el modo de 8 bits entonces recomendamos que lea mi instructable sobre interfaz de 8 bits. Ahora estoy suponiendo en este instructable que ya
¿Cómo interfaz 16 X 2 LCD con el microcontrolador 8051?

¿Cómo interfaz 16 X 2 LCD con el microcontrolador 8051?

Este es un diagrama de circuito de interface 16 X 2 LCD con AT89C51 que es una familia de microcontroladores 8051. Utilizamos pantallas LCD para la visualización de los mensajes de error, etc.. Aquí, estamos proporcionando la información de la pantal
Interfaz LCD con Galileo Intel

Interfaz LCD con Galileo Intel

TÍTULO: INTERFAZ LCD CON INTELGALILEOINTRODUCCIÓN:Este proyecto tiene como objetivo en la entretela un LCD con un Galileo de Intel. La pantalla LCD muestra una declaración de la recepción. Esto es facilitado por código de programa que se carga en el