ARDUINO: Reloj digital con display

Material necesario:

  • Placa Arduino
  • Modulo RTC (Real Time Clock) DS1302
  • Display 7 segmentos (4 digitos) TM1637

Esquema de Conexión:

Esquemático realizado con la fantástica app Fritzing

En muchos modelos del RTC los conectores pueden aparecer con otro nombre: SDA corresponde a Data, SCL a Clock y SQW al Reset.

Código:

#include
#include
#include // librería TM1637
int8_t ClearScreen[] = {0x00,0x00,0x00,0x00};
byte POINTS[] = { 10000000,10000000,10000000, 10000000}; //El separador de 2 puntos del display

//Configuración de pines del display

const int CLK = 2; // el pin CLK está conectado al pin digital 3
const int DIO = 3; // el pin DIO está conectado al pin digital 2

//Configuración de pines del reloj
const int kCePin = 5; // Chip Enable (Reset)
const int kIoPin = 6; // Input/Output (Data)
const int kSclkPin = 7; // Serial Clock (CLK)

// Creamos los objetos para ambos componentes
DS1302 rtc(kCePin, kIoPin, kSclkPin);

TM1637Display display(CLK, DIO);

String dayAsString(const nTime::Day day) {
switch (day) {
case nTime::kSunday: return "Sunday";
case nTime::kMonday: return "Monday";
case nTime::kTuesday: return "Tuesday";
case nTime::kWednesday: return "Wednesday";
case nTime::kThursday: return "Thursday";
case nTime::kFriday: return "Friday";
case nTime::kSaturday: return "Saturday";
}
return "(unknown day)";
}

void displayTime() { //Muestra la información a través del display

int month = rtc.month();
display.showNumberDec(month);
delay(1000);

display.showNumberDec(rtc.date());
delay(1000);

display.showNumberDec(rtc.year());
delay(1000);

int hourmin = (rtc.hour()*100) + rtc.minutes();
display.showNumberDec();
display.setSegments(POINTS);
display.showNumberDec(hourmin);

}

void printTime() { //Muestra la información como un output por el puerto serie

nTime t = rtc.time();

// Dia de la semana
const String day = dayAsString(t.day);

//Formateo de fecha
char buf[50];
snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
day.c_str(),
t.yr, t.mon, t.date,
t.hr, t.min, t.sec);

// Muestro la cadena formatearla por pantalla a través del puerto serie
Serial.println(buf);
}

//Configuracion necesaria

void setup() {

display.setBrightness(0x0a); //brillo del display al Maximo

Serial.begin(9600); //Inicio el puerto serie

// Inicio el reloj y configuro la hora y fecha
rtc.writeProtect(false);
rtc.halt(false);
rtc.year(2017);
rtc.month(12);
rtc.date(3);
rtc.hour(20);
rtc.minutes(59);
rtc.seconds(40);
rtc.day(nTime::kSunday);

}

// Bucle principal
void loop() {
printTime();
displayTime();
delay(1000);
}

Librerías Necesarias:

DS1302.zip

TM1637-master.zip

DataSheets:

DS1302_datasheet.PDF

TM1637_datasheet.PDF

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada.