add time adjustment

This commit is contained in:
King Kévin 2017-05-07 15:53:20 +02:00
parent 663491db61
commit f92e654a5e
1 changed files with 46 additions and 3 deletions

49
main.c
View File

@ -98,7 +98,6 @@ struct number_t numbers[] = {
{0, 5, 4},
};
#define POWER_SWITCH_PORT B /**< port to switch power of all devices (including this micro-controller) */
#define POWER_SWITCH_PIN 8 /**< pin to switch power of all devices (including this micro-controller) */
#define POWER_BUTTON_PORT B /**< port to detect power switching activity (to keep alive) */
@ -674,9 +673,9 @@ void main(void)
uint16_t buttons_diff = buttons^buttons_new; // get difference
buttons = buttons_new; // save new state
if (buttons_diff) { // only do something if there is a change
printf("button pressed: %016b\n", buttons);
//printf("button pressed: %016b\n", buttons);
for (uint8_t number=0; number<LENGTH(numbers); number++) {
if (buttons_diff&(1<<numbers[number].up) || buttons_diff&(1<<numbers[number].down)) { // buttons for display 0
if (buttons_diff&(1<<numbers[number].up) || buttons_diff&(1<<numbers[number].down)) { // buttons for number
if (buttons&(1<<numbers[number].up) && buttons&(1<<numbers[number].down)) { // both buttons are pressed
numbers[number].number = 0xffff; // disable number
} else if (buttons&(1<<numbers[number].up) && buttons_diff&(1<<numbers[number].up)) { // only up button has been pressed
@ -703,6 +702,50 @@ void main(void)
led_tm1637_number(numbers[number].number);
}
}
if ((buttons_diff&(1<<9) && buttons&(1<<9)) || (buttons_diff&(1<<8) && buttons&(1<<8))) { // buttons for time pressed
rtc_ds1307_time = rtc_ds1307_read_time(); // get time/date from external RTC
if (rtc_ds1307_time==NULL) {
printf("could not get time from DS1307: resetting\n");
rtc_ds1307_setup(); // resetting peripheral
} else {
// adjust time
if (buttons_diff&(1<<9) && buttons&(1<<9)) { // up pressed
if (!(23==rtc_ds1307_time[2] && 59==rtc_ds1307_time[1] && 59==rtc_ds1307_time[0])) { // don't handle date changes since it's too complex
rtc_ds1307_time[0] += 1;
while (rtc_ds1307_time[0]>=60) {
rtc_ds1307_time[0] -= 60;
rtc_ds1307_time[1] += 1;
}
while (rtc_ds1307_time[1]>=60) {
rtc_ds1307_time[1] -= 60;
rtc_ds1307_time[2] += 1;
}
while (rtc_ds1307_time[2]>=24) {
rtc_ds1307_time[2] -= 24;
}
}
} else if (buttons_diff&(1<<8) && buttons&(1<<8)) { // down pressed
if (!(0==rtc_ds1307_time[2] && 0==rtc_ds1307_time[1] && 0==rtc_ds1307_time[0])) { // don't handle date changes since it's too complex
if (rtc_ds1307_time[0]>0) {
rtc_ds1307_time[0] -= 1;
} else {
rtc_ds1307_time[0] = 59;
if (rtc_ds1307_time[1]>0) {
rtc_ds1307_time[1] -= 1;
} else {
rtc_ds1307_time[1] = 59;
rtc_ds1307_time[2] -= 1; // it can't be 0
}
}
}
}
rtc_seconds = rtc_ds1307_time[0]; // save seconds since this is only updated every minute
if (!rtc_ds1307_write_time(rtc_ds1307_time[0], rtc_ds1307_time[1], rtc_ds1307_time[2], rtc_ds1307_time[3], rtc_ds1307_time[4], rtc_ds1307_time[5], rtc_ds1307_time[6])) {
printf("could not set time on DS1307: resetting\n");
rtc_ds1307_setup(); // resetting peripheral
}
}
}
}
// display time and frame number