Reloj RTC DS1307 y LCD I2C
Para comprobar la potencia del BUS I2C vamos ha hacer un peuqeño ejemplo de conectar un RTC DS1307 y una pantalla LCD I2C.Conectamos los 2 dispositivos al BUS I2C según la tabla que ya vimos con anterioridad:
I2C
|
Arduino
|
Arduino Mega
|
VCC
|
5V
|
5V
|
GND
|
GND
|
GND
|
SCL
|
A5
|
D21
|
SDA
|
A4
|
D20
|
En un Arduino UNO quedaría algo así:
El código de este ejemplo está basado en el que puse en el post del RTC, añadiendo las librerías necesarias para el LCD. Y lo más interesante una función que nos refresca la hora y la fecha sin refrescar toda la pantalla.
[...] // Función de refresco de la hora por LCD void printDate(){ RTC.getTime(); int second = RTC.second; int minute = RTC.minute; int hour = RTC.hour; //24 hour time int monthDay = RTC.day; int month = RTC.month; int year = RTC.year; dia = vacia + monthDay; if (dia.length() == 1) {dia = "0" + dia;} mes = vacia + month; if (mes.length() == 1) { mes = "0" + mes;} anno = vacia + year; if (anno.length() == 1) { anno = "0" + anno; } hora = vacia + hour; if (hora.length() == 1) { hora = "0" + hora; } minuto = vacia + minute; if (minuto.length() == 1) { minuto = "0" + minuto; } segundo = vacia + second; if (segundo.length() == 1) {segundo = "0" + segundo;} fechaChar = dia + "/" + mes + "/" + anno; horaChar = hora + ":" + minuto + ":" + segundo; horaChar.toCharArray(horaC,10); fechaChar.toCharArray(fechaC,11); lcd.setCursor(0,3); if (monthDay != monthDay_old) { if (monthDay < 10){ lcd.print("0"); lcd.setCursor(1,3); lcd.print(monthDay); } else { lcd.print(monthDay); } monthDay = monthDay_old; lcd.setCursor(2,3); lcd.print("/"); lcd.setCursor(3,3); } if (month != month_old) { if (month < 10){ lcd.print("0"); lcd.setCursor(4,3); lcd.print(month); } else { lcd.print(month); } lcd.setCursor(5,3); lcd.print("/"); lcd.setCursor(6,3); month = month_old; } if (year != year_old) { if (year < 10){ lcd.print("0"); lcd.setCursor(7,3); lcd.print(year); } else { lcd.print(year); } year = year_old; } lcd.setCursor(12,3); if (hour < 10){ lcd.print("0"); lcd.setCursor(13,3); lcd.print(hour); } else { lcd.print(hour); } lcd.setCursor(14,3); lcd.print(":"); lcd.setCursor(15,3); if (minute < 10){ lcd.print("0"); lcd.setCursor(16,3); lcd.print(minute); } else { lcd.print(minute); } lcd.setCursor(17,3); lcd.print(":"); lcd.setCursor(18,3); if (second < 10){ lcd.print("0"); lcd.setCursor(19,3); lcd.print(second); } else { lcd.print(second); } } [...]
Bajar Ejemplo Completo (URL Alternativa Bajar Ejemplo Completo)
Una vez cargado el ejemplo tenemos un Display LCD con la fecha y la hora como este:
Este ejemplo lo iré completando con más elementos.
Hola me baje el ejemplo pero no encuentro las librerias q utilizaste de el rtc y lcd: #include "LiquidCrystal_I2C.h"
ResponderEliminar#include "DS1307new.h"
Lo he intentado hacer con las mias pero se refresca la pantalla y no veo nada..me podrias pasar las librerias para probar si con las tuyas me pasa o no, muchas gracias
Hola, en los post del RTC y del LCD tienes las librerías. También a la derecha de este mismo post tienes todos los ejemplos y librerías disponibles.
EliminarUn saludo.
Solucionado, muchas gracias, mi LCD es de YwRobot(va con la libreria LiquidCrystal_I2C2004V1 por si alguno tambien le es de ayuda),y le habia metido la V2.
Eliminarse puede conecta alos mismo pines analogicos los comparte no hay problema en eso????
ResponderEliminarHola, sí eso es lo bueno de utilizar el bus I2C.
EliminarUn saludo.
pero se pueden conectar otros sensores??? solo en lo analogico o digital se puede gracias :) me ahorre pines jajajaj
ResponderEliminarPuedes conectar varios dispositivos, mira este enlace:
Eliminarhttp://es.wikipedia.org/wiki/I%C2%B2C