Buscando información para un proyecto de un reloj con calendario y RTC me encontré con un programasin RTC mucho más completo que el que ya tenia publicado en Arduino: Reloj simple sin modulo RTC DS1307.
- Día (1, 2, 3,....)
- Día de la semana (Lunes, Martes, Miércoles...)
- Mes (Enero, Febrero, Marzo....)
- Año
Como en el anterior ejemplo este reloj, en el momento que deje de recibir corriente se resetearan los valores teniendo que volver a poner el reloj en hora.
Saludos!!!
// -------------------------------------------------------
// Reloj digital simple con calendario
// Developed by Darren Yates for APC magazine
// Traducido y modificado por Peyutron para Infotronikblog
// Se han sustituido los botones un modo analógico por
// dos pulsadores
// -------------------------------------------------------
#include "LiquidCrystal.h"
#include "TimedAction.h"
LiquidCrystal lcd(8,9,4,5,6,7);
int keyIn;
int pul_select = 11;
int pul_conf= 12;
int NUM_KEYS = 5;
int key=-1;
int oldkey=-1;
char dia[7][10] = { "Lun","Mar","Mie","Jue","Vie","Sab","Dom"};
char mes[12][11] = { "Enero ","Febrero ","Marzo ","Abril ","Mayo ","Junio ","Julio ","Agosto","Septiembre","Octubre ","Noviembre","Diciembre" };
char hourTime [24][5] = {
"12am","1am","2am","3am","4am","5am","6am","7am","8am","9am","10am","11am",
"12pm","1pm","2pm","3pm","4pm","5pm","6pm","7pm","8pm","9pm","10pm","11pm" };
byte DiaMes[12] = {
31,28,31,30,31,30,31,31,30,31,30,31};
char pregunta [6][16] = { "Selec. ano:","Selec. mes:","Sel. dia/fecha:","Selec. dia:","Selec. hora:","Selec. minuto:" };
int qNum = 0;
int tempVar = 0;
int maxVar = 0;
int minVar = 0;
int delayTiempo = 3500;
int startClock = 0;
int selDia = 0;
int selDiaSem = 1;
int selMes = 0;
int selAno = 2015;
int selHora = 0;
int selMin = 0;
int secs = 0;
String strMin = "";
String strSecs = "";
String strHora = "";
String hora12 = "";
String topLine = "";
String botLine = "";
String spaceChar = " ";
void setup() {
pinMode (pul_select,INPUT);
pinMode (pul_conf,INPUT);
lcd.begin (16,2);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Infotronikblog");
lcd.setCursor(0,1);
lcd.print("Reloj Calendario");
delay(delayTiempo);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Poner en hora");
lcd.setCursor(0,1);
lcd.print("usando el boton");
delay(delayTiempo);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Selct y presiona");
lcd.setCursor(0,1);
lcd.print("el boton Conf ");
delay(delayTiempo);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("para continuar");
delay(delayTiempo);
PonerHora();
}
TimedAction timer = TimedAction(1000,clockUpdate);
void PonerHora(){
delay(1000);
for (qNum = 0; qNum < 6; qNum++)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(pregunta[qNum]);
keyIn = 0;
waitForSelect();
}
lcd.clear();
}
void loop() {
if (startClock ==1 ) {timer.check();}
if (digitalRead(pul_select)==LOW && digitalRead(pul_conf)==LOW){
PonerHora();
}
}
void waitForSelect() {
switch (qNum) {
case 0:
tempVar = selAno;
maxVar = 2020;
minVar = 2015;
break;
case 1:
tempVar = selMes;
maxVar = 11;
minVar = 0;
break;
case 2:
tempVar = selDiaSem;
maxVar = DiaMes[selMes];
minVar = 1;
break;
case 3:
tempVar = selDia;
maxVar = 6;
minVar = 0;
break;
case 4:
tempVar = selHora;
maxVar = 23;
minVar = 0;
break;
case 5:
tempVar = selMin;
maxVar = 59;
minVar = 0;
}
lcd.setCursor(0,1);
displayVars();
while (keyIn != 4) {
if (digitalRead(pul_conf)==LOW) {
delay(300);
switch (qNum) {
case 0:
selAno = tempVar;
break;
case 1:
selMes = tempVar;
break;
case 2:
selDiaSem = tempVar;
break;
case 3:
selDia = tempVar;
break;
case 4:
selHora = tempVar;
break;
case 5:
selMin = tempVar;
startClock = 1;
}
keyIn = 4;
}
if (digitalRead(pul_select) ==LOW) {
tempVar++;
if (tempVar> maxVar){
tempVar = minVar;
}
delay(200);
}
lcd.setCursor(0,1);
displayVars();
}
delay(50);
}
void displayVars() {
switch (qNum) {
case 0:
lcd.print(tempVar + spaceChar);
break;
case 1:
lcd.print(mes[tempVar] + spaceChar);
break;
case 2:
lcd.print(tempVar + spaceChar);
break;
case 3:
lcd.print(dia[tempVar] + spaceChar);
break;
case 4:
lcd.print(hourTime[tempVar] + spaceChar);
break;
case 5:
lcd.print(tempVar + spaceChar);
}
}
void clockUpdate() {
secs++;
if (secs == 60) {
secs = 0;
selMin++;
}
if (selMin == 60) {
selMin = 0;
selHora++;
}
if (selHora == 24) {
selHora = 0;
selDia++;
if (selDia ==7) {
selDia = 0;
}
selDiaSem++;
}
if (selDiaSem > DiaMes[selMes]) {
selDiaSem = 1;
selMes++;
if (selMes == 12) {
selMes = 0;
selAno++;
}
}
if (secs < 10) {
strSecs = "0"+String(secs);
}
else {
strSecs = String(secs);
}
if (selMin < 10) {
strMin = "0"+String(selMin);
}
else {
strMin = String(selMin);
}
if (selHora < 12) {
hora12 = "am";
if (selHora==0) {
strHora = "12";
}
else {
strHora = String(selHora);
}
}
else {
hora12 = "pm";
strHora = String(selHora);
}
if (selHora > 12) {
strHora = String(selHora-12);
}
topLine = String(dia[selDia]).substring(0,3)+","+spaceChar+selDiaSem+spaceChar+String(mes[selMes]).substring(0,3)+spaceChar
+selAno+spaceChar;
botLine = strHora+":"+strMin+":"+strSecs+hora12+spaceChar;
lcd.setCursor(0,0);
lcd.print(topLine);
lcd.setCursor(3,1);
lcd.print(botLine);
}
int get_key(unsigned int input) {
int k;
for (k = 0; k < NUM_KEYS; k++){
return k;
}
if (k >= NUM_KEYS) k = -1;
return k;
}
Esta muy buenl, pero la librería no funciona u.u T-T
ResponderEliminarBuenas Tamara, cual es el mensaje que sale al compilar?
EliminarAquí tienes el enlace a la librería original: http://playground.arduino.cc/uploads/Code/TimedAction-1_6.zip
Solo tienes que extraer en zip en la carpeta de Arduino llamada "libraries". Espero te funcione con esto, Saludos!!!
tienes el diagrama del reloj candelario sin rtc
ResponderEliminarsi fuera si....me lo podrias pasar por favor
EliminarBuenas Galvani, Ya he puesto el esquema en la entrada, Saludos!!!
EliminarDespués de varios comentarios he revisado y actualizado el programa, ya no debería de dar ningún error. Gracias por colaborar!!!
ResponderEliminar"TimedAction timer = TimedAction(1000,clockUpdate);" amigo ya cambie esto y puse a voip loop y me descarge la librery de TimedAction y me sale compilation terminated.
ResponderEliminarError de compilación
Buenas Luis, has descargado el nuevo programa? He revisado el código y ahora no da el error, también probé a descargar la librería por si era fallo de la librería y no, era el programa que estaba mal, aunque siempre subo los programas una vez que los he probado, tal y como se ve en el vídeo es como lo subí, así que no tengo muy claro por qué dejo de funcionar. Por suerte ya está arreglado. Descarga el archivo desde el enlace, Saludos!!!
ResponderEliminarcual enlace??
EliminarSe consigue lista de elementos para este proyecto de reloj-calendario-sin-rtc.html
ResponderEliminarBuenas Guillermo! te refieres a la lista de componentes? o donde he comprado los componentes? la primera sería un Arduino ONE, un LCD16x2, 2resistencias de 10K y una de 330ohm, una resistencia variable de 10K y dos pulsadores NA(normalmente abierto).
EliminarPara la segunda pregunta, los elementos los compro todos por Ebay.com.
Saludos!!!
Gracias Peyutron por la informacion. Algo tarde te doy las gracias ya estoy en marcha con este y otros proyectos.
EliminarColega sabe que el lcd no para de entrar a configurarse solo, osea se prende y entra en el ciclo de configuracion y se pone solo la fecha y hora, sera un problema del codigo? porque con o sin pulsadores conectados comienza a configurarse solo igual y nunca se detiene
ResponderEliminarBuenas, revisa la conexión de los botones, prueba conectando las resistencias directamente de los pines 11 y 12 a +5V, eso tendría que estabilizar, y a partir de ahí monta los botones con una configuración PULL UP. Así debería de funcionar.
EliminarSaludos
Peyutron Nocturno. Gracias por su información.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola, Baje tu programa y la libreria para hacer unas pruebas, pero me sale un error al compilarlo
ResponderEliminarimedAction.h:33:22: fatal error: WProgram.h: No such file or directory
por que marcar error con la libreria WProgram.h ?
saludos
Buenas noches, necesito hacer un calendario en un LCD 16x2
ResponderEliminarBuenas, puedes modificar el archivo para que solo muestre el calendario.
EliminarBuenas, quisiera saber si el código sufre atrasos, me refiero a si en funcionamiento continuo se atrasa. Saludos
ResponderEliminarBuenas, si, al no llevar un reloj RTC muy posiblemente tenga algún retardo al terminar las 24h. Si necesitas algo más preciso usa el RTC. Saludos!!!
ResponderEliminarMe podrias ayudar con el diagrama, en mi compu no se logra ver bien y creo que tengo problemas en la coneccion de los botones, también el valor de las resistencias, soy novato
ResponderEliminarBuenas Hector, las resistencias son de 10K, Saludos!!!
Eliminardisculpa pero al verificar el programa me dice #include "WProgram.h" como error
ResponderEliminarque hago?
Buenas cesar, ese error es por una librería mal referenciada, tendrás que buscar en la librería donde ponga WProgram.h y sustituirlo por arduino.h. bajaste la librería de esta web? Que IDE de Arduino estás usando?saludos!!!
Eliminarsi descargue la librería de esta pagina
Eliminares la de windows
ARDUINO 1.8.5
EliminarBuenas Cesar, voy a revisar los archivos, escríbeme al correo y cuando lo tenga te lo mando directamente. Un saludo!!!
Eliminarte paso mi correo cesarguerrerolopez@gmail.com y gracias
Eliminarme sale esto mm no entiendo ya hice todo lo de arriba
ResponderEliminarC:\Users\Acer\Desktop\jose\Relog_sin_RTC\Relog_sin_RTC.ino:8:24: fatal error: TimeAction.h: No such file or directory
#include
^
compilation terminated.
exit status 1
Error compilando para la tarjeta Arduino/Genuino Uno.
No encuentra el archivo TimeAction.h o falta el #include esté bien escrito en el encabezado del programa y que este la librería en la carpeta librarte, saludos!!!
Eliminargracias
Eliminarpero me indica q la libreia no es valida
ResponderEliminarArduino:1.8.5 (Windows Store 1.8.10.0) (Windows 10), Tarjeta:"Arduino/Genuino Uno"
ResponderEliminarIn file included from C:\Users\JE_DT\AppData\Local\Temp\arduino_modified_sketch_212697\sketch_jul12a.ino:9:0:
C:\Users\JE_DT\Documents\Arduino\libraries\TimeAction/TimedAction.h:33:22: fatal error: WProgram.h: No such file or directory
#include "WProgram.h"
^
compilation terminated.
exit status 1
Error compilando para la tarjeta Arduino/Genuino Uno.
Este reporte podría tener más información con
"Mostrar salida detallada durante la compilación"
opción habilitada en Archivo -> Preferencias.
que hago
hermano aqui te dice como solucionarlo yo lo hice y funciono ese error http://cursoarduinomega.blogspot.com/2015/04/error-wprogramh-no-such-file-or.html
EliminarGracias por esta comunicación me servirá mucho.
ResponderEliminarHare mi segundo reloj con este sistema.