diff --git a/code/Makefile b/code/Makefile index 15eb975..6f18ee0 100644 --- a/code/Makefile +++ b/code/Makefile @@ -5,4 +5,4 @@ build: avr-gcc main.c i2c_master.c -o counter -mmcu=attiny85 program: - avrdude + avrdude -p attiny85 -c usbtiny -U flash:w:counter diff --git a/code/main.c b/code/main.c index 42b62bd..ca210bb 100644 --- a/code/main.c +++ b/code/main.c @@ -96,7 +96,7 @@ const uint8_t PROGMEM unfold_table[16] = const uint8_t PROGMEM symbols[80] = { - 0x3D, 0x51, 0x49, 0x45, 0x3D, // 0 + 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 0x00, 0x42, 0x7F, 0x40, 0x00, // 1 0x42, 0x61, 0x51, 0x49, 0x46, // 2 0x21, 0x41, 0x45, 0x4B, 0x31, // 3 @@ -105,7 +105,7 @@ const uint8_t PROGMEM symbols[80] = 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 0x03, 0x71, 0x09, 0x05, 0x03, // 7 0x36, 0x49, 0x49, 0x49, 0x36, // 8 - 0x06, 0x49, 0x49, 0x29, 0x1D, // 9 + 0x06, 0x49, 0x49, 0x29, 0x1E, // 9 0x7C, 0x04, 0x78, 0x04, 0x78, // m 0x1F, 0x20, 0x40, 0x20, 0x1F, // V 0x00, 0x60, 0x60, 0x00, 0x00, // . @@ -218,16 +218,18 @@ int main() eeprom_idx = 0; state = STATE_SETTING; } - - read_eeprom_val(eeprom_idx, &eeprom_value, &move_dir); - if (0 == eeprom_value) - { - state = STATE_SETTING; - } else { - count_value = eeprom_value; - count_value_fine = eeprom_value; + read_eeprom_val(eeprom_idx, &eeprom_value, &move_dir); + if (0 == eeprom_value) + { + state = STATE_SETTING; + } + else + { + count_value = eeprom_value; + count_value_fine = eeprom_value; + } } if (STATE_COUNTING == state) @@ -235,6 +237,7 @@ int main() display_enable(0); } + sei(); while(1) { switch (state) @@ -325,6 +328,8 @@ int main() display_enable(0); do_sleep(); } + + // STATE_COUNTING break; case STATE_SETTING: @@ -376,6 +381,8 @@ int main() update_display(count_value, highlight, move_dir, dir_highlight); } long_press_when_ms = 0; + + // EVENT_BUTTON_UP break; } } @@ -406,6 +413,7 @@ int main() long_press_when_ms = 0; } + // STATE_SETTING break; } } @@ -558,6 +566,11 @@ void get_symbol16(uint8_t index, uint8_t *out) out[i] = 0; } + if (index > sizeof(symbols) / 5) + { + return; + } + for (i = 0; i < CHAR_SIZE; ++i) { data_byte = pgm_read_byte(&(symbols[index * CHAR_SIZE + i])); @@ -642,19 +655,23 @@ void print_mm(uint32_t value, uint32_t highlight) } // Check if we need to print (for leading zeroes) - if (!(is_first && (0 == highlight) && (0 == symbol))) + if (is_first && (0 == highlight) && (0 == symbol)) + { + symbol = 0xFF; + } + else { is_first = 0; - print_symbol(symbol * CHAR_SIZE, x, y, invert); } + print_symbol(symbol, x, y, invert); x += (CHAR_SIZE + 1) * 2; div_factor /= 10; } // Print 'mm' - print_symbol(10 * CHAR_SIZE, x, y, 0); + print_symbol(10, x, y, 0); x += (CHAR_SIZE + 1) * 2; - print_symbol(10 * CHAR_SIZE, x, y, 0); + print_symbol(10, x, y, 0); } void print_direction(uint8_t is_up, uint8_t invert) @@ -663,13 +680,13 @@ void print_direction(uint8_t is_up, uint8_t invert) if (is_up) { - symbol_index[0] = 14 * CHAR_SIZE; - symbol_index[1] = 13 * CHAR_SIZE; + symbol_index[0] = 14; + symbol_index[1] = 13; } else { - symbol_index[0] = 13 * CHAR_SIZE; - symbol_index[1] = 15 * CHAR_SIZE; + symbol_index[0] = 13; + symbol_index[1] = 15; } print_symbol(symbol_index[0], OLED_X_SIZE - CHAR_SIZE * 2, 0, invert); @@ -695,7 +712,7 @@ void print_voltage(uint16_t value) symbol = value / div_factor; value %= div_factor; - print_symbol(symbol * CHAR_SIZE, x, y, 0); + print_symbol(symbol, x, y, 0); if (0 == x) { x += (CHAR_SIZE + 1) * 2; @@ -705,11 +722,11 @@ void print_voltage(uint16_t value) } // Print 'V' - print_symbol(11 * CHAR_SIZE, x, y, 0); + print_symbol(11, x, y, 0); // Print '.' x = (CHAR_SIZE + 1) * 2; - print_symbol(12 * CHAR_SIZE, x, y, 0); + print_symbol(12, x, y, 0); } uint16_t adc_measure() @@ -737,7 +754,7 @@ uint16_t measure_voltage() uint16_t result; val = 110; - val *= 1023; + val *= 1024; val /= adc_measure(); result = val;