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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
#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:
DataSheets: