Buenas noches compañeros, hablare al grano, soy un novato en arduino, me he armado el clasico reloj con DS1307, usando la libreria RTClib, el reloj funciona bien, pero quiero visualizarlo en 12H y no encuentro nada en San Google, ojala puedan orientarme para poder aprender y ver donde modificar la libreria, he leido que hay q mandar el bit al registro para modificarlo, pero no se como se hace eso, espero puedan ayudarme, saludos
-
Postea el código que estas usando. Podemos dar muchas respuestas y códigos, luego al final resulta que ni era lo que se quería resolver.
-
Para guiarte un poco: recuerda que 13 horas = 1, 14 horas = 2, etc. y 24 horas = 0. Basta con que tomes la hora del 1307 y la pases por un comparador, puede ser un arreglo de select case, y no le sigo más. Como dije en el punto 1 es necesario ver el código.
Saludos
cierto, tienes mucha razon, aqui pongo el codigo q estoy usando, en micaso trabajo con un LCd i2c, el tiempo se visualiza en 24h, pero quiero saber como pasarlo a 12h, aqui el codigo
#include <Wire.h>//libreria para el manejo del protocolo i2c
#include "RTClib.h" //libreria del reloj tiempo real
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f,16,2);
RTC_DS1307 RTC;//funcion propia de la libreria RTC para poder configurar los datos internos del RTC
void setup() {
lcd.init();
lcd.backlight();
Wire.begin();//Se inicializa comunicacion i2c
RTC.begin();//Se inicializa el RTC
delay(100);
//RTC.adjust(DateTime(2014, 1, 21, 3, 0, 0));//Se Ajusta la hora por Software
//la linea siguiente ajusta la hora y la fecha con la del sistema operativo
//RTC.adjust(DateTime(__DATE__, __TIME__));
}
void loop() {
DateTime now = RTC.now();
lcd.setCursor(4,0);
lcd.print(now.hour());
lcd.setCursor(6,0);
lcd.print(':');
lcd.setCursor(7,0);
lcd.print(now.minute());
lcd.setCursor(9,0);
lcd.print(':');
lcd.setCursor(10,0);
lcd.print(now.second());
lcd.setCursor(4,1);
lcd.print(now.day());
lcd.print('/');
lcd.setCursor(6,1);
lcd.print(now.month());
lcd.print('/');
lcd.setCursor(8,1);
lcd.print(now.year());
}
las librerias suelen traer ejemplos que se pueden abrir en el ide,mira a ver si hay alguno que te sirva.tambien puedes ver el fichero .h de la libreria para ver los metodos.la que yo uso por defecto suele ponerla en 12 h y si quieres 24h suele ser algo como now.hour24()
Página 8 de la hoja de datos del DS1307 donde dice como ponerlo en formato 12/24 hour mode
el bit 6 es el responsable. Si esta en 1 lo pones en modo 12 horas y si esta en 0 en modo 24 horas.
De todos modos es trivial
Este pequeño código resuelve tu problema
char ap = 'A';
if (hour>12) {
hour-=12;
ap = 'P';
} else if (!hour) {
hour = 12;
}
sprintf(outstring,"%d:%02d:%02d %c.M.",hour,min,sec,ap);
La librería contempla el uso de 12/24hs para las alarmas pero no veo como fijarlo en ese modo para la lectura de la hora normal. Aunque como dije tiene un bit asignado a tal efecto.
Muchas Gracias _jose y surbyte, voy a intentar implementarlo en mi codigo y veremos que sucede, note que el DS1307 no es muy preciso, ahora estoy usando el DS3231 y ese mi sorprendio su prescision, bueno, eso es otra cosa, posteare los resultados
Me sorprende que cuando ajustas alarmas se considera el uso del modo 12/24 pero no hay nada para cuando lo lees en la librería RTClib.
Ahora bien, intenta enviarle ese comando que te he mostrado que figura en la hoja de datos, vale tambien para DS3231. A ver si al leerlos lo hacen en tu formato y sino implementa la rutina que te indiqué.