Paso 10: programación
AlgoritmoBucle principal
- Recuperar tiempo de módulo RTC (en horas y minutos)
- Si el tiempo es otro Tiempo de visualización
- Repetir
Tiempo de visualización
- Tiempo dividido en cuatro dígitos. (con / div 10)
- Para cada pantalla de siete segmentos, segmentos a avanzar pantalla dígitos
Dígitos de la pantalla
- Colocar la lógica de decodificador. Int se traducen en siete segmentos pedidos.
- Mueve servos necesarios de X grado. Movimiento innecesario grados de servos Y (donde X es la posición de salida e Y es la posición del plano.
Muestra
#include < Wire.h >
#include "RTClib.h"RTC_DS1307 RTC;
segA corto = 0; Pin de pantalla 14
segB corto = 1; Pin de la pantalla 16
segC corta = 2; Pin de pantalla 13
segD corto = 3; Pin de pantalla 3
segE corto = 4; Pin de pantalla 5
corto segF = 5; Pin de pantalla 11
segG corto = 6; Pin de pantalla 15segA_OUT corto = 110;
segB_OUT corto = 110;
segC_OUT corto = 110;
segD_OUT corto = 110;
segE_OUT corto = 110;
segF_OUT corto = 110;
segG_OUT corto = 110;segA_IN corto = 90;
segB_IN corto = 90;
segC_IN corto = 90;
segD_IN corto = 90;
segE_IN corto = 90;
segF_IN corto = 90;
segG_IN corto = 90;int hora = 2000;
DatePast DateTime;
DateNow DateTime;mantenimiento de la casa
void setup() {}
Serial.Begin(9600);
Wire.Begin();
RTC.begin();
RTC.adjust (DateTime (__DATE__, __TIME__));
datePast = RTC.now();
}bucle principal
void loop() {}
dateNow = RTC.now();
Si (! () datePast.hour() == dateNow.hour() & & datePast.minute() == dateNow.hour()))
{
displayNumber(dateNow.hour()*100+dateNow.minute());
datePast = dateNow;
}
}Dado un número, disponemos de 10:22
Después de ejecutar a través de los 4 números, la pantalla queda apagada
void displayNumber (int toDisplay) {}
para (int cifras = 4; cifra > 0; dígitos--) {}
lightNumber (toDisplay % 10, dígitos);
toDisplay = 10;
}iniciar el movimiento
Serial.Print ("T"); Serial.println(Time);
}{} void mover (int servo, int posición)
Serial.Print("#");
Serial.Print(servo);
Serial.Print ("P");
Serial.Print(Position);
}Dado un número, se convierte en los segmentos
Si número == 10, luego apague el número
{} void lightNumber (int numberToDisplay, int segmento)int offset = (tramo - 1) * 7;
interruptor (numberToDisplay) {}caso 0:
mover (segA + offset, segA_OUT);
mover (segB + offset, segB_OUT);
mover (segC + offset, segC_OUT);
mover (segD + offset, segD_OUT);
mover (segE + offset, segE_OUT);
mover (segF + offset, segF_OUT);
mover (segG + offset, segG_IN);
rotura;caso 1:
mover (segA + offset, segA_IN);
mover (segB + offset, segB_OUT);
mover (segC + offset, segC_OUT);
mover (segD + offset, segD_IN);
mover (segE + offset, segE_IN);
mover (segF + offset, segF_IN);
mover (segG + offset, segG_IN);
rotura;caso 2:
mover (segA + offset, segA_OUT);
mover (segB + offset, segB_OUT);
mover (segC + offset, segC_IN);
mover (segD + offset, segD_OUT);
mover (segE + offset, segE_OUT);
mover (segF + offset, segF_IN);
mover (segG + offset, segG_OUT);
rotura;caso 3:
mover (segA + offset, segA_OUT);
mover (segB + offset, segB_OUT);
mover (segC + offset, segC_OUT);
mover (segD + offset, segD_OUT);
mover (segE + offset, segE_IN);
mover (segF + offset, segF_IN);
mover (segG + offset, segG_OUT);
rotura;caso 4:
mover (segA + offset, segA_IN);
mover (segB + offset, segB_OUT);
mover (segC + offset, segC_OUT);
mover (segD + offset, segD_IN);
mover (segE + offset, segE_IN);
mover (segF + offset, segF_OUT);
mover (segG + offset, segG_OUT);
rotura;caso 5:
mover (segA + offset, segA_OUT);
mover (segB + offset, segB_IN);
mover (segC + offset, segC_OUT);
mover (segD + offset, segD_OUT);
mover (segE + offset, segE_IN);
mover (segF + offset, segF_OUT);
mover (segG + offset, segG_OUT);
rotura;
caso 6:
mover (segA + offset, segA_OUT);
mover (segB + offset, segB_IN);
mover (segC + offset, segC_OUT);
mover (segD + offset, segD_OUT);
mover (segE + offset, segE_OUT);
mover (segF + offset, segF_OUT);
mover (segG + offset, segG_OUT);
rotura;
caso 7:
mover (segA + offset, segA_OUT);
mover (segB + offset, segB_OUT);
mover (segC + offset, segC_OUT);
mover (segD + offset, segD_IN);
mover (segE + offset, segE_IN);
mover (segF + offset, segF_IN);
mover (segG + offset, segG_IN);
rotura;
caso 8:
mover (segA + offset, segA_OUT);
mover (segB + offset, segB_OUT);
mover (segC + offset, segC_OUT);
mover (segD + offset, segD_OUT);
mover (segE + offset, segE_OUT);
mover (segF + offset, segF_OUT);
mover (segG + offset, segG_OUT);
rotura;
caso 9:
mover (segA + offset, segA_OUT);
mover (segB + offset, segB_OUT);
mover (segC + offset, segC_OUT);
mover (segD + offset, segD_OUT);
mover (segE + offset, segE_IN);
mover (segF + offset, segF_OUT);
mover (segG + offset, segG_OUT);
rotura;
caso 10:
mover (segA + offset, segA_IN);
mover (segB + offset, segB_IN);
mover (segC + offset, segC_IN);
mover (segD + offset, segD_IN);
mover (segE + offset, segE_IN);
mover (segF + offset, segF_IN);
mover (segG + offset, segG_IN);
rotura;
}
}
Otros
Usted también necesitará configurar reloj RTC la primera vez. Esto le dará un tiempo de inicio igual al ordenador. Necesita la biblioteca RTC para ejecutar el código siguiente.
#include
#include "RTClib.h"RTC_DS1307 RTC;
void setup () {}
Serial.Begin(57600);Wire.Begin();
RTC.begin();
if (!. {RTC.isrunning())}
Serial.println ("RTC no corre!");
RTC.adjust (DateTime (__DATE__, __TIME__));
}
}