Andrew Harpin
/
BinaryClock
main.cpp
- Committer:
- annodomini2
- Date:
- 2009-12-09
- Revision:
- 0:0bbbe06425db
File content as of revision 0:0bbbe06425db:
///////////////////////////////////////////////////////////////////////////// // Binary Clock // // // // Author Created // // ------ ------- // // Andrew Harpin 09 December 2009 // // // // Purpose // // ------- // // Create a simple program to test the RTC and serial controls // // on the Mbed device // // // // License // // ------- // // MIT Open Source // // // // Warranty // // -------- // // None // // // ///////////////////////////////////////////////////////////////////////////// #include "mbed.h" // Define your outputs DigitalOut Sec1(p5); DigitalOut Sec2(p7); DigitalOut Sec4(p9); DigitalOut Sec8(p11); DigitalOut Sec16(p13); DigitalOut Sec32(p15); DigitalOut Min1(p30); DigitalOut Min2(p28); DigitalOut Min4(p26); DigitalOut Min8(p24); DigitalOut Min16(p22); DigitalOut Min32(p21); DigitalOut Hour1(LED4); DigitalOut Hour2(LED3); DigitalOut Hour4(LED2); DigitalOut Hour8(LED1); DigitalOut Hour16(p20); void setnewtime(); int main() { // Get the current time time_t seconds = time(NULL); // Check clock is initialised if((seconds < 500) || (seconds == 0xFFFFFFF)) { setnewtime(); } struct tm *tmr; // You're doing this forever, MWWWAAHAHAHAAA!!!! while (1) { // Get latest time seconds = time(NULL); // Print to serial char buffer[32]; strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds)); printf("%s", buffer); // Put time in accessible format tmr = localtime(&seconds); // Seconds Sec1 = (bool)(((uint8_t)tmr->tm_sec) & 0x01); Sec2 = (bool)((((uint8_t)tmr->tm_sec) & 0x02) >> 1); Sec4 = (bool)((((uint8_t)tmr->tm_sec) & 0x04) >> 2); Sec8 = (bool)((((uint8_t)tmr->tm_sec) & 0x08) >> 3); Sec16 = (bool)((((uint8_t)tmr->tm_sec) & 0x10) >> 4); Sec32 = (bool)((((uint8_t)tmr->tm_sec) & 0x20) >> 5); // Minutes Min1 = (bool)(((uint8_t)tmr->tm_min) & 0x01); Min2 = (bool)((((uint8_t)tmr->tm_min) & 0x02) >> 1); Min4 = (bool)((((uint8_t)tmr->tm_min) & 0x04) >> 2); Min8 = (bool)((((uint8_t)tmr->tm_min) & 0x08) >> 3); Min16 = (bool)((((uint8_t)tmr->tm_min) & 0x10) >> 4); Min32 = (bool)((((uint8_t)tmr->tm_min) & 0x20) >> 5); // Hours Hour1 = (bool)(((uint8_t)tmr->tm_hour) & 0x01); Hour2 = (bool)((((uint8_t)tmr->tm_hour) & 0x02) >> 1); Hour4 = (bool)((((uint8_t)tmr->tm_hour) & 0x04) >> 2); Hour8 = (bool)((((uint8_t)tmr->tm_hour) & 0x08) >> 3); Hour16 = (bool)((((uint8_t)tmr->tm_hour) & 0x10) >> 4); wait(1); // Not my favorite method, but its easy } } void setnewtime() { struct tm t; uint8_t day_limit = 0; printf("\n\n*******************************\n"); printf("Real Time Clock setting utility\n"); printf("*******************************\n\n"); // Years t.tm_year = -1; // Initialise do { // Print request and wait for user entry printf("\nEnter Year 1900- : "); scanf("%d",&t.tm_year); // Validate entry if((t.tm_year < 1900)) { t.tm_year = -1; printf("\nInvalid Value!!! "); } } while(t.tm_year < 0); // Months t.tm_mon = -1; // Initialise do { // Print request and wait for user entry printf("\nEnter month 1-12 : "); scanf("%d",&t.tm_mon); // Validate entry if((t.tm_mon < 1) || (t.tm_mon > 12)) { t.tm_mon = -1; printf("\nInvalid Value!!! "); } } while(t.tm_mon < 0); // Determine maximum number of days in the assigned month switch(t.tm_mon) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day_limit = 31; break; case 2: day_limit = 28; break; case 4: case 6: case 9: case 11: day_limit = 30; break; } // Days t.tm_mday = -1; // Initialise do { // Print request and wait for user entry printf("\nEnter day 1-%d : ",day_limit); scanf("%d",&t.tm_mday); // Validate entry if((t.tm_mday < 1) || (t.tm_mday > day_limit)) { t.tm_mday = -1; printf("\nInvalid Value!!! "); } } while(t.tm_mday < 0); // Hours t.tm_hour = -1; // Initialise do { // Print request and wait for user entry printf("\nEnter Hours 0-23 : "); scanf("%d",&t.tm_hour); // Validate entry if((t.tm_hour < 0) || (t.tm_hour > 23)) { t.tm_hour = -1; printf("\nInvalid Value!!! "); } } while(t.tm_hour < 0); // Minutes t.tm_min = -1; // Initialise do { // Print request and wait for user entry printf("\nEnter Minutes 0-59 : "); scanf("%d",&t.tm_min); // Validate entry if((t.tm_min < 0) || (t.tm_min > 59)) { t.tm_min = -1; printf("\nInvalid Value!!! "); } } while(t.tm_min < 0); // Seconds t.tm_sec = -1; // Initialise do { // Print request and wait for user entry printf("\nEnter Seconds 0-59 : "); scanf("%d",&t.tm_sec); // Validate entry if((t.tm_sec < 0) || (t.tm_sec > 59)) { t.tm_sec = -1; printf("\nInvalid Value!!! "); } } while(t.tm_sec < 0); // adjust for tm structure required values t.tm_year = t.tm_year - 1900; t.tm_mon = t.tm_mon - 1; // set the time set_time(mktime(&t)); printf("\n\nAnd you're done!\n\nTime now : \n\n"); }