#include #include #include "clock.h" #define VALID_LED_REG_DIR DDRB #define VALID_LED_REG PORTB #define VALID_LED PB0 #define DARK_SWITCH_REG_DIR DDRD #define DARK_SWITCH_OUT_REG PORTD #define DARK_SWITCH_IN_REG PIND #define DARK_SWITCH PD7 uint8_t validLedStatus = 0; void validLedSetStatus(uint8_t x) { validLedStatus = x; } uint8_t isNotDark() { return DARK_SWITCH_IN_REG & (1 << DARK_SWITCH); } static inline void validLedEnable() { PORTB |= (1 << PB0); } static inline void validLedDisable() { PORTB &= ~(1 << PB0); } void validLedInit() { // validLed VALID_LED_REG_DIR |= (1 << VALID_LED); // dark switch DARK_SWITCH_REG_DIR &= ~(1 << DARK_SWITCH); // pull-up on DARK_SWITCH_OUT_REG |= (1 << DARK_SWITCH); } void validLedEngine() { static uint8_t ledToggle = 0; if (clockNextBlink()) { uint8_t light = isNotDark(); switch (validLedStatus) { case 0: validLedDisable(); break; case 1: if (ledToggle != 0) { ledToggle = 0; validLedDisable(); } else { ledToggle = 1; if (light != 0) { validLedEnable(); } else { validLedDisable(); } } break; case 2: if (light != 0) { validLedEnable(); } else { validLedDisable(); } break; } } }