aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/button.c13
-rw-r--r--src/button.h1
-rw-r--r--src/display.c8
-rw-r--r--src/display.h2
-rw-r--r--src/main.c5
5 files changed, 14 insertions, 15 deletions
diff --git a/src/button.c b/src/button.c
index 34d799c..dc52265 100644
--- a/src/button.c
+++ b/src/button.c
@@ -1,18 +1,14 @@
#include <avr/io.h>
#include <stdint.h>
-#include "avr/interrupt.h"
#include "button.h"
#include "rtc.h"
-bool is_button_active = false;
-
-uint16_t button_tick_count = 0;
-
-ISR(PCINT0_vect, ISR_FLATTEN) { button_tick(); }
+enum ButtonState check_button_state();
void button_tick() {
- switch (check_button_state()) {
+ enum ButtonState button_state = check_button_state();
+ switch (button_state) {
case BUTTON_PRESSED:
if (seconds <= 10)
seconds = 0;
@@ -27,6 +23,9 @@ void button_tick() {
}
}
+bool is_button_active = false;
+uint16_t button_tick_count = 0;
+
enum ButtonState check_button_state() {
if (is_button_active && button_tick_count >= LONG_PRESS_TICK_COUNT) {
button_tick_count = 0;
diff --git a/src/button.h b/src/button.h
index bb41eb6..8aa7442 100644
--- a/src/button.h
+++ b/src/button.h
@@ -16,5 +16,4 @@ enum ButtonState {
uint16_t extern button_tick_count;
void button_tick();
-enum ButtonState check_button_state();
#endif
diff --git a/src/display.c b/src/display.c
index 9579ff8..8380b81 100644
--- a/src/display.c
+++ b/src/display.c
@@ -55,21 +55,21 @@ static uint8_t special_segment_antipins[] = {10, 5, 7, 6};
void write_time(uint8_t digit_index) {
// reset pins
- uint32_t ddr = ~SPECIAL_SEGMENT_PINS;
- uint32_t port = 0;
+ uint16_t ddr = ~SPECIAL_SEGMENT_PINS;
+ uint16_t port = 0;
uint8_t digits[] = {seconds_digit1, seconds_digit2, minutes_digit1,
minutes_digit2};
uint8_t digit = digits[digit_index];
- uint32_t segments = digit_masks[digit];
+ uint16_t segments = digit_masks[digit];
uint8_t pin = special_segment_pins[digit_index];
uint8_t antipin = special_segment_antipins[digit_index];
uint8_t segment_pin =
digit_index / 2 == 0 ? SPECIAL_SEGMENT_1 : SPECIAL_SEGMENT_2;
uint8_t other_segment_pin =
digit_index / 2 == 0 ? SPECIAL_SEGMENT_2 : SPECIAL_SEGMENT_1;
- uint8_t other_segment_mask =
+ uint16_t other_segment_mask =
digit_index / 2 == 0 ? SPECIAL_SEGMENT_MASK_2 : SPECIAL_SEGMENT_MASK_1;
// Activate special segment
diff --git a/src/display.h b/src/display.h
index f01ee73..44c0c0e 100644
--- a/src/display.h
+++ b/src/display.h
@@ -2,8 +2,6 @@
#define _LOADED_DISPLAY
#include <stdint.h>
-#include "rtc.h"
-
// "_gfedcba"
// Reversed because a-g is mapped to pa0-6. (pa7 is decimal)
// Complemented because display is common anode
diff --git a/src/main.c b/src/main.c
index 11ad99f..98b63a2 100644
--- a/src/main.c
+++ b/src/main.c
@@ -20,13 +20,16 @@ FUSES = {
// Timer 0 has lower priority than timer 1, so some ticks could get skipped on
// interrupt starvation
ISR(TIM0_COMPA_vect, ISR_FLATTEN) {
- // button_tick(); // Check button click
+ button_tick(); // Check button click
display_render();
}
// RTC interrupt
ISR(TIM1_COMPA_vect, ISR_FLATTEN) { rtc_increment(); }
+// Button interrupt
+ISR(PCINT0_vect, ISR_FLATTEN) { button_tick(); }
+
int main(void) {
PRR = 0b0011; // Power reduction register. Shut down USI and ADC