void menu_option_set_date( state_t* currentState ){ #define DAY 0 #define MONTH 1 #define YEAR 2 static uint8_t tempDate[3]; //= {rtc_data[4],rtc_data[5],rtc_data[6]}; static uint8_t mode=DAY; static char writeOnce = 1; if(writeOnce){ lcd_clearf(); //lcd_clear(); lcd_setcursor(1,1); lcd_string("option_set_date"); tempDate[DAY] = rtc_data[4]; tempDate[MONTH] = rtc_data[5]; tempDate[YEAR] = rtc_data[6]; lcd_setcursor(2,1); lcd_zahl(tempDate[DAY],2,'m'); lcd_data('.'); lcd_zahl(tempDate[MONTH],2,'m'); lcd_data('.'); lcd_zahl(tempDate[YEAR],2,'m'); writeOnce--; } // Werte erhöhen / verringern if(currentState->input == KEY_UP_S){ tempDate[mode]++; } else if (currentState->input == KEY_DOWN_S) { tempDate[mode]--; } else if (currentState->input == KEY_LEFT_S) { if (mode == DAY) mode = YEAR; else mode--; } else if (currentState->input == KEY_RIGHT_S) { if (mode == YEAR) mode = DAY; else mode++; } if(tempDate[DAY]<1) tempDate[DAY]=31; if(tempDate[DAY]>31) tempDate[DAY]=1; if(tempDate[MONTH]<1) tempDate[MONTH]=12; if(tempDate[MONTH]>12) tempDate[MONTH]=1; if(tempDate[YEAR]==255) tempDate[YEAR]=40; if(tempDate[YEAR]>40) tempDate[YEAR]=1; // Ausgeben der aktuellen temporären Werte lcd_setcursor(2,1); lcd_zahl(tempDate[DAY],2,'m'); lcd_data('.'); lcd_zahl(tempDate[MONTH],2,'m'); lcd_data('.'); lcd_zahl(tempDate[YEAR],2,'m'); // Abspeichern der temporären Werte in RTC, bestätigt mit OK if(currentState->input == KEY_RIGHT_L){ RTC_write_Date(tempDate[DAY],tempDate[MONTH],tempDate[YEAR]); lcd_setcursor(2,12); lcd_data('O'); lcd_data('K'); } else if (currentState->input != KEY_NULL){ lcd_setcursor(2,12); lcd_data(' '); lcd_data(' '); } if(currentState->input == KEY_LEFT_L){ writeOnce = 1; currentState->function = menu_option_date; } };