RTC demonstration program. Prompts user for input and sets RTC. Created for Nucleo F446RE. On the F446RE board, reset and even downloading new code doesn't disrupt or reset the RTC.

Dependencies:   mbed

Committer:
CSTritt
Date:
Sat Jul 28 12:31:40 2018 +0000
Revision:
0:a338d4ab50c9
Child:
1:811c5881ca5c
Initial version of my set and get RTC example.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CSTritt 0:a338d4ab50c9 1 /*
CSTritt 0:a338d4ab50c9 2 Project: my_SetRTC, File: main.cpp.
CSTritt 0:a338d4ab50c9 3
CSTritt 0:a338d4ab50c9 4 Based on mktime example: weekday calculator from
CSTritt 0:a338d4ab50c9 5 http://www.cplusplus.com/reference/ctime/mktime. Modified to set Mbed/Nucleo
CSTritt 0:a338d4ab50c9 6 RTC.
CSTritt 0:a338d4ab50c9 7
CSTritt 0:a338d4ab50c9 8 Modified by C. S. Tritt
CSTritt 0:a338d4ab50c9 9 Last modified: 7/28/18 (v. 1.0)
CSTritt 0:a338d4ab50c9 10 */
CSTritt 0:a338d4ab50c9 11 #include <mbed.h> // wait, etc.
CSTritt 0:a338d4ab50c9 12 //#include <mbed_mktime.h> // For _rtc_mktime. Didn't work.
CSTritt 0:a338d4ab50c9 13 //#include <stdio.h> // printf, scanf - incl. in mbed.h.
CSTritt 0:a338d4ab50c9 14 //#include <time.h> // time_t, struct tm, time, mktime in mbed.h.
CSTritt 0:a338d4ab50c9 15
CSTritt 0:a338d4ab50c9 16 int main ()
CSTritt 0:a338d4ab50c9 17 {
CSTritt 0:a338d4ab50c9 18 // Create variables.
CSTritt 0:a338d4ab50c9 19 time_t rawtime;
CSTritt 0:a338d4ab50c9 20 struct tm* timeinfo;
CSTritt 0:a338d4ab50c9 21 int year, month ,day, hours, minutes, secs;
CSTritt 0:a338d4ab50c9 22 const char* weekday[] = { "Sunday", "Monday",
CSTritt 0:a338d4ab50c9 23 "Tuesday", "Wednesday",
CSTritt 0:a338d4ab50c9 24 "Thursday", "Friday", "Saturday"};
CSTritt 0:a338d4ab50c9 25
CSTritt 0:a338d4ab50c9 26 // Prompt user for date and time.
CSTritt 0:a338d4ab50c9 27 printf("\nTurn echo on to see your input.\n");
CSTritt 0:a338d4ab50c9 28 printf("\nEnter year (YYYY): "); scanf ("%d",&year);
CSTritt 0:a338d4ab50c9 29 printf("\nEnter month (1 to 12): "); scanf ("%d",&month);
CSTritt 0:a338d4ab50c9 30 printf("\nEnter day (D or DD): "); scanf ("%d",&day);
CSTritt 0:a338d4ab50c9 31 printf("\nEnter hours (0 to 23):"); scanf ("%d",&hours);
CSTritt 0:a338d4ab50c9 32 printf("\nEnter hours (0 to 59):"); scanf ("%d",&minutes);
CSTritt 0:a338d4ab50c9 33 printf("\nEnter hours (0 to 59):"); scanf ("%d",&secs);
CSTritt 0:a338d4ab50c9 34
CSTritt 0:a338d4ab50c9 35 // Get current RTC time structure.
CSTritt 0:a338d4ab50c9 36 time(&rawtime);
CSTritt 0:a338d4ab50c9 37 timeinfo = localtime(&rawtime); // Modify to local time.
CSTritt 0:a338d4ab50c9 38
CSTritt 0:a338d4ab50c9 39 // Modify it using user input.
CSTritt 0:a338d4ab50c9 40 timeinfo->tm_year = year - 1900; // tm_year are from 1900.
CSTritt 0:a338d4ab50c9 41 timeinfo->tm_mon = month - 1; // tm_month are 0 to 11.
CSTritt 0:a338d4ab50c9 42 timeinfo->tm_mday = day;
CSTritt 0:a338d4ab50c9 43 timeinfo->tm_hour = hours;
CSTritt 0:a338d4ab50c9 44 timeinfo->tm_min = minutes;
CSTritt 0:a338d4ab50c9 45 timeinfo->tm_sec = secs;
CSTritt 0:a338d4ab50c9 46
CSTritt 0:a338d4ab50c9 47 // Call mktime: timeinfo->tm_wday will be set.
CSTritt 0:a338d4ab50c9 48 mktime(timeinfo);
CSTritt 0:a338d4ab50c9 49
CSTritt 0:a338d4ab50c9 50 // tm_wday are 0 to 6. Use to check entered values.
CSTritt 0:a338d4ab50c9 51 printf("\nThis must be a %s.\n", weekday[timeinfo->tm_wday]);
CSTritt 0:a338d4ab50c9 52
CSTritt 0:a338d4ab50c9 53 // Set the mbed RTC to the current time. Not interupt safe. Should be
CSTritt 0:a338d4ab50c9 54 // _rtc_mktime, but that didn't work.
CSTritt 0:a338d4ab50c9 55 set_time(mktime(timeinfo));
CSTritt 0:a338d4ab50c9 56
CSTritt 0:a338d4ab50c9 57 while (true) { // Loop forever more.
CSTritt 0:a338d4ab50c9 58 // Get current time.
CSTritt 0:a338d4ab50c9 59 time_t nowSecs = time(NULL);
CSTritt 0:a338d4ab50c9 60
CSTritt 0:a338d4ab50c9 61 // Display it in various ways.
CSTritt 0:a338d4ab50c9 62 printf("\nTime as seconds since January 1, 1970 = %d\n", nowSecs);
CSTritt 0:a338d4ab50c9 63 printf("Time as a basic string = %s", ctime(&nowSecs)); // ctime incl. \n.
CSTritt 0:a338d4ab50c9 64 char buffer[32];
CSTritt 0:a338d4ab50c9 65 strftime(buffer, 32, "%I:%M %p\n", localtime(&nowSecs));
CSTritt 0:a338d4ab50c9 66 printf("As a custom string = %s\n", buffer);
CSTritt 0:a338d4ab50c9 67
CSTritt 0:a338d4ab50c9 68 // Sleep for 1 second.
CSTritt 0:a338d4ab50c9 69 wait(1.0);
CSTritt 0:a338d4ab50c9 70 }
CSTritt 0:a338d4ab50c9 71 }