Tabla de contenido:

Reloj de precisión: 3 pasos
Reloj de precisión: 3 pasos

Video: Reloj de precisión: 3 pasos

Video: Reloj de precisión: 3 pasos
Video: Quizá NO TE CONTARON esto de los SENSORES cardiacos de TU SMARTWATCH 2024, Mes de julio
Anonim
Reloj de precisión
Reloj de precisión

Todos necesitamos relojes, así que, ¿por qué no hacer los suyos en este instructivo? Le mostraré cómo hacer un reloj de precisión, una vez que lo configure, realizará un seguimiento automático de la hora actual en el fondo de todo. Si bien también solo necesita muy pocos suministros y cero soldaduras.

Suministros

Primero, necesitará un Arduino pero cualquier Arduino funcionará

A continuación, necesitará una variedad de cables de puente genéricos.

2 interruptores de botón Sparkfun de 12 mm

Una placa de pruebas tradicional

y una pantalla LCD 1602 de 16 pines

Paso 1: cableado

Alambrado
Alambrado

Para que este reloj funcione, debe conectarlo de una manera muy específica o, de lo contrario, obtendrá un montón de números aleatorios en la pantalla en lugar de la hora.

Paso 2: el código

Dado que no estamos usando un RTC, el código será un poco largo, pero afortunadamente hice todo el trabajo duro por usted y lo proporcioné aquí.

Simplemente copie y pegue esto en Arduino IDE o en el editor web.

#include "LiquidCrystal.h"

// Esto define el cableado del LCD al DIGITALpins const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);

// Configuración de Constrast LCD digital int cs = 9; // pin 9 para contraste PWM const int contrast = 100; // contraste predeterminado

// La visualización de la hora inicial es 12:59:45 PM int h = 12; int m = 59; int s = 45; int bandera = 1; //PM

// Botones de ajuste de tiempo int button1; int button2;

// Definición de pines para botones de ajuste de tiempo int hs = 0; // pin 0 para ajuste de horas int ms = 1; // pin 1 para ajuste de minutos

// Tiempo de espera de luz de fondo const int Time_light = 150; int bl_TO = Time_light; // Tiempo de espera de la luz de fondo int bl = 10; // Pin de luz de fondo const int backlight = 120; // ¡¡¡No más de 7 mA !!!

// Para una lectura precisa de la hora, use Arduino Real Time Clock y no solo delay () static uint32_t last_time, now = 0; // RTC

configuración vacía () {lcd.begin (16, 2); pinMode (hs, INPUT_PULLUP); // evitar resistencias pullup externas para el botón 1 pinMode (ms, INPUT_PULLUP); // y el botón 2 analogWrite (cs, contrast); // ajustar el contraste VO analogWrite (bl, backlight); // girar en Luz de fondo ahora = millis (); // leer el valor inicial de RTC}

void loop () {lcd.begin (16, 2); // cada segundo // Actualizar la pantalla LCD // Imprimir TIEMPO en horas, minutos, segundos + AM / PM lcd.setCursor (0, 0); lcd.print ("Hora"); if (h <10) lcd.print ("0"); // siempre 2 dígitos lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); lcd.print (m); lcd.print (":"); si (s <10) lcd.print ("0"); lcd.print (s);

if (bandera == 0) lcd.print ("AM"); if (bandera == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // para la Línea 2 lcd.print ("Reloj de precisión");

// reemplazo mejorado de delay (1000) // Mucho mejor precisión, no más dependiente del tiempo de ejecución del bucle

for (int i = 0; i <5; i ++) // realiza un bucle de 200ms de 5 veces, para una respuesta del botón más rápida {

while ((ahora-última_hora) <200) // delay200ms {ahora = millis (); } // bucle interno de 200ms last_time = ahora; // prepárate para el siguiente ciclo

// leer los botones de configuración button1 = digitalRead (hs); // leer los botones button2 = digitalRead (ms);

// Tiempo de espera de la luz de fondo bl_TO--; if (bl_TO == 0) {analogWrite (bl, 0); // Luz de fondo apagada bl_TO ++; } // Pulsa cualquiera para activar la luz de fondo if (((button1 == 0) | (button2 == 0)) & (bl_TO == 1)) {bl_TO = Time_light; analogWrite (bl, retroiluminación); // esperar hasta que se suelte el botón while ((button1 == 0) | (button2 == 0)) {button1 = digitalRead (hs); // leer botones button2 = digitalRead (ms); }} else // Procesar el botón 1 o el botón 2 cuando se presiona mientras la luz de fondo está encendida {if (button1 == 0) {h = h + 1; bl_TO = Luz_tiempo; analogWrite (bl, retroiluminación); }

si (botón2 == 0) {s = 0; m = m + 1; bl_TO = Luz_tiempo; analogWrite (bl, retroiluminación); }

/ * ---- administrar segundos, minutos, horas am / pm desbordamiento ---- * / if (s == 60) {s = 0; m = m + 1; } si (m == 60) {m = 0; h = h + 1; } si (h == 13) {h = 1; bandera = bandera + 1; if (bandera == 2) bandera = 0; }

if ((button1 == 0) | (button2 == 0)) // Actualiza la pantalla si se presiona el botón de ajuste de tiempo {// Actualiza la pantalla LCD // Imprime el TIEMPO en horas, minutos, segundos + AM / PM lcd.setCursor (0, 0); lcd.print ("Hora"); if (h <10) lcd.print ("0"); // siempre 2 dígitos lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); lcd.print (m); lcd.print (":"); si (s <10) lcd.print ("0"); lcd.print (s);

if (bandera == 0) lcd.print ("AM"); if (bandera == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // para la Línea 2 lcd.print ("Reloj de precisión"); }

} // finaliza si si no} // finaliza para

// bucle exterior de 1000 ms

s = s + 1; // incrementar seg. contando // ---- administrar segundos, minutos, horas am / pm desbordamiento ---- if (s == 60) {s = 0; m = m + 1; } si (m == 60) {m = 0; h = h + 1; } si (h == 13) {h = 1; bandera = bandera + 1; if (bandera == 2) bandera = 0; }

// Fin del bucle}

Paso 3: esquema (esto no es realmente un paso)

Esquema (esto no es realmente un paso)
Esquema (esto no es realmente un paso)

Si alguien que lee esto es un nerd tecnológico, aquí también hay un esquema, puede verlo enloquecer.

Disfruta y diviértete y, sobre todo, mantente fresco.

Recomendado: