/* Example sketch for interfacing with the DS1302 timekeeping chip. Copyright (c) 2009, Matt Sparks All rights reserved. http://quadpoint.org/projects/arduino-ds1302 */ #include #include #include /* Set the appropriate digital I/O pin connections */ uint8_t CE_PIN = 5; uint8_t IO_PIN = 6; uint8_t SCLK_PIN = 7; /* Create buffers */ char buf[50]; char day[10]; /* Create a DS1302 object */ DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN); void print_time() { /* Get the current time and date from the chip */ Time t = rtc.time(); /* Name the day of the week */ memset(day, 0, sizeof(day)); /* clear day buffer */ switch (t.day) { case 1: strcpy(day, "Sunday"); break; case 2: strcpy(day, "Monday"); break; case 3: strcpy(day, "Tuesday"); break; case 4: strcpy(day, "Wednesday"); break; case 5: strcpy(day, "Thursday"); break; case 6: strcpy(day, "Friday"); break; case 7: strcpy(day, "Saturday"); break; } /* Format the time and date and insert into the temporary buffer */ snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec); /* Print the formatted string to serial so we can see the time */ Serial.println(buf); } void setup() { Serial.begin(9600); /* Initialize a new chip by turning off write protection and clearing the clock halt flag. These methods needn't always be called. See the DS1302 datasheet for details. */ rtc.write_protect(false); rtc.halt(false); /* Make a new time object to set the date and time */ /* Tuesday, May 19, 2009 at 21:16:37. */ Time t(2009, 5, 19, 21, 16, 37, 3); /* Set the time and date on the chip */ rtc.time(t); } /* Loop and print the time every second */ void loop() { print_time(); delay(1000); }