diff --git a/code/inc/menu.h b/code/inc/menu.h index 27ed90f..08fcbc7 100644 --- a/code/inc/menu.h +++ b/code/inc/menu.h @@ -6,12 +6,15 @@ extern int8_t menu_val_timezone_ee EEMEM; extern uint8_t menu_val_format; extern uint8_t menu_val_format_ee EEMEM; extern uint8_t menu_val_leds_ee EEMEM; +extern uint8_t menu_val_dots; +extern uint8_t menu_val_dots_ee EEMEM; typedef enum { OFF, TIMEZONE, FORMAT, LEDS, + DOTS, EXIT } menu_state_t; diff --git a/code/makefile b/code/makefile index d867dc6..dc1b738 100644 --- a/code/makefile +++ b/code/makefile @@ -37,7 +37,7 @@ LDFLAGS = -Wl,-Map=$(BUILDDIR)/$(TARGET).map,--cref LDFLAGS += -lm #LDFLAGS += -nostdlib -AVRDUDE_FLAGS = -p $(MCU) -C ./avrdude.conf -c $(AVRDUDE_PROGRAMMER) -U flash:w:$(BUILDDIR)/$(TARGET).hex +AVRDUDE_FLAGS = -p $(MCU) -C ./avrdude.conf -c $(AVRDUDE_PROGRAMMER) -U flash:w:$(BUILDDIR)/$(TARGET).hex -U eeprom:w:settings.eep #### Define programs and commands. #### CC = avr-gcc diff --git a/code/src/main.c b/code/src/main.c index 2452cbc..1771969 100644 --- a/code/src/main.c +++ b/code/src/main.c @@ -44,9 +44,9 @@ int8_t parse_nmea_gps(char input_string[RX_INPUT_BUFFER_SIZE], uint8_t output_bu void encoder_action(uint8_t dir){ if(get_menu_active()) if (dir) { - menu_up_down(1); - } else { menu_up_down(-1); + } else { + menu_up_down(1); } } @@ -78,7 +78,10 @@ int main(void){ clock_to_buffer(clock); - PORTC = (PORTC & (~DOT)) | (clock[0]%2) << 4; // blink dots + if(menu_val_dots) + PORTC = (PORTC & (~DOT)) | (clock[0]%2) << 4; // blink dots + else + PORTC &= ~DOT; _delay_ms(100); } print_SR_Buffer(); @@ -105,20 +108,25 @@ void setup(){ eeprom_write_byte(&menu_val_format_ee, menu_val_format); } OCR2A = eeprom_read_byte(&menu_val_leds_ee); + menu_val_dots = eeprom_read_byte(&menu_val_dots_ee); + if(menu_val_dots == 0xFF){ + menu_val_dots = 0x01; + eeprom_write_byte((uint8_t*)&menu_val_dots_ee, menu_val_dots); + } - DDRA = ENABLE_TUBE_SUPPLY; + DDRA = ENABLE_TUBE_SUPPLY; - DDRB = STATUS_LED_B + DDRB = STATUS_LED_B | STATUS_LED_C | MOSI | CLK; - DDRC = LATCH_SR + DDRC = LATCH_SR | ENABLE_SR | DOT | ENABLE_TUBE_PSU; - DDRD = RESET_SR + DDRD = RESET_SR | TUBE_LED; //-------------------------- diff --git a/code/src/menu.c b/code/src/menu.c index d67001f..9a13611 100644 --- a/code/src/menu.c +++ b/code/src/menu.c @@ -10,6 +10,8 @@ int8_t menu_val_timezone; uint8_t menu_val_format_ee EEMEM; uint8_t menu_val_format; uint8_t menu_val_leds_ee EEMEM; +uint8_t menu_val_dots; +uint8_t menu_val_dots_ee EEMEM; uint8_t get_menu_active(){ if(state != OFF) @@ -29,7 +31,6 @@ void enter_menu(){ selected ^= 1; break; } - //debug_menu(); } const char* get_menu_text(){ @@ -40,7 +41,6 @@ const char* get_menu_text(){ switch(state){ case TIMEZONE: res = " "; - menu_val_timezone = eeprom_read_byte((uint8_t*)&menu_val_timezone_ee); if(menu_val_timezone < 0) res[3] = '-'; else @@ -58,6 +58,12 @@ const char* get_menu_text(){ res[4] = (OCR2A / 10 % 10) + 0x30; res[5] = (OCR2A % 10) + 0x30; break; + case DOTS: + if(menu_val_dots) + res = " AN "; + else + res = " AUS"; + break; default: res = "ERROR "; break; @@ -66,6 +72,7 @@ const char* get_menu_text(){ switch(state){ case TIMEZONE: res = "ZONE "; + eeprom_write_byte((uint8_t*)&menu_val_timezone_ee, menu_val_timezone); break; case FORMAT: res = "FORMAT"; @@ -74,6 +81,10 @@ const char* get_menu_text(){ res = "LED "; eeprom_write_byte(&menu_val_leds_ee, OCR2A); break; + case DOTS: + res = "PUNKTE"; + eeprom_write_byte((uint8_t*)&menu_val_dots_ee, menu_val_dots); + break; case EXIT: res = "ZURUEK"; break; @@ -93,7 +104,6 @@ void menu_up_down(uint8_t up_down){ menu_val_timezone = 12; if(menu_val_timezone > 12) menu_val_timezone = -12; - eeprom_write_byte((uint8_t*)&menu_val_timezone_ee, menu_val_timezone); break; case FORMAT: if(menu_val_format == 12) @@ -104,6 +114,9 @@ void menu_up_down(uint8_t up_down){ case LEDS: OCR2A += up_down; break; + case DOTS: + menu_val_dots ^= 0x01; + break; default: break; }