add time adjustment
This commit is contained in:
parent
663491db61
commit
f92e654a5e
49
main.c
49
main.c
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue