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},
|
{0, 5, 4},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define POWER_SWITCH_PORT B /**< port to switch power of all devices (including this micro-controller) */
|
#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_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) */
|
#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
|
uint16_t buttons_diff = buttons^buttons_new; // get difference
|
||||||
buttons = buttons_new; // save new state
|
buttons = buttons_new; // save new state
|
||||||
if (buttons_diff) { // only do something if there is a change
|
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++) {
|
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
|
if (buttons&(1<<numbers[number].up) && buttons&(1<<numbers[number].down)) { // both buttons are pressed
|
||||||
numbers[number].number = 0xffff; // disable number
|
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
|
} 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);
|
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
|
// display time and frame number
|
||||||
|
|
Loading…
Reference in New Issue