diff options
-rw-r--r-- | README.md | 10 | ||||
-rw-r--r-- | main.c | 51 |
2 files changed, 37 insertions, 24 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..98fa706 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# CCCB Doorbell System + +Shitty pile of code for the Arduino in the Bread Box for controlling the door opener. + +## Thursday Mode +When the mode is enabled, the door will be opened after the first click on the Door Bell +It will be disabled with a timeout, so you can't forget to turn it off. + +## Code Opener +When the Door Bell ist pressed 3 Times in a Row, the door will open. @@ -5,16 +5,16 @@ #include <avr/interrupt.h> #include <string.h> -#define HZ 15625ULL -#define TIMEOUT_SEC 4 -#define MIN_PULSE_WIDTH_MS 10 -#define RING_DURATION_SEC 20 -#define OPEN_DURATION_SEC 3 -#define THURSDAY_TIMEOUT_MIN 300UL -#define THURSDAY_OPEN_DELAY 750UL +#define HZ 15625ULL // Frequency +#define TIMEOUT_SEC 4 // time after clicking once till the lamp/bell goes on +#define MIN_PULSE_WIDTH_MS 25 // Time the button needs to be pressed till in ms +#define RING_DURATION_SEC 20 // Time the lamp lights up in sec +#define OPEN_DURATION_SEC 4 // Door open duration in sec +#define THURSDAY_TIMEOUT_MIN 420UL // Minutes till Thursday is disabled +#define THURSDAY_OPEN_DELAY 750UL // Time till the door is opened when the doorbell is pressed -#define PRESSED_MIN_MS 50UL -#define RELEASED_MIN_MS 50UL +#define PRESSED_MIN_MS 50UL // Time slots between Code Input +#define RELEASED_MIN_MS 50UL // Time slots between Code Input static uint8_t global_thursday_mode = 0; static uint16_t global_thursday_timectr_sec = 0; @@ -56,7 +56,7 @@ void open(void) { PORTC &= ~0x02; /* Opener relay */ } -uint8_t handle_open_button(void) { +uint8_t handle_open_button(void) { // Open when the Open-Button is pressed if (PINC&0x20) return 0; tx_str(PSTR("OPEN Manual open\r\n")); @@ -64,7 +64,7 @@ uint8_t handle_open_button(void) { return 1; } -void ring(void) { +void ring(void) { // RING RING RING RING!!! tx_str(PSTR("RING Ringing\r\n")); PORTB |= 0x20; PORTC |= 0x04; @@ -74,18 +74,18 @@ void ring(void) { PORTC &= ~0x04; } -void code(void) { +void code(void) { // Open the door when the button was pressed x times tx_str(PSTR("CODE Code access granted\r\n")); open(); } -void set_thursday_mode(uint8_t mode) { +void set_thursday_mode(uint8_t mode) { // Toggle the thursday mode (/Enable till it is disabled or timeout is reached) global_thursday_mode = mode; global_thursday_timectr_sec = 0; tx_str(mode ? PSTR("THU1 Thursday mode set to on\r\n") : PSTR("THU0 Thursday mode set to off\r\n")); - if (mode) + if (mode) // toggle PORTC |= 0x10; else PORTC &= ~0x10; @@ -123,6 +123,8 @@ int main(void) { * A4/PC4 OUT thursday mode signal */ /* use 115200Bd */ + + // Initialize UBRR0H = 0; UBRR0L = 16; UCSR0A = (1<<U2X0); @@ -144,20 +146,21 @@ int main(void) { _delay_ms(500); tx_help(); tx_str(PSTR("BOOT Device booted.\r\n")); + // Device initilized. - uint16_t pattern[7]; - uint8_t pidx = 0; + uint16_t pattern[7]; // times the button has to be pressed to open the door (don't change when you don't know what you do) + uint8_t pidx = 0; uint8_t thursday_toggle_timeout = 0; uint8_t codefail = 0; - for (;;) { + for (;;) { // Main loop handle_open_button(); - if (!(PINC&0x08) && !thursday_toggle_timeout) { /* Thursday button */ + if (!(PINC&0x08) && !thursday_toggle_timeout) { /* Is the Thursday button pressed? */ set_thursday_mode(!global_thursday_mode); thursday_toggle_timeout = 1; TCNT1 = 0; } - if (TCNT1 > TIMEOUT_SEC*HZ) { /* Doorbell button timeout */ - if (pidx != 0 || codefail) + if (TCNT1 > TIMEOUT_SEC*HZ) { /* Thursday Button Timeout (Disables Thursday after X hours */ + if (pidx != 0 || codefail) ring(); pidx = 0; codefail = 0; @@ -165,17 +168,17 @@ int main(void) { TCNT1 = 0; global_thursday_timectr_sec += TIMEOUT_SEC; - if (global_thursday_timectr_sec >= THURSDAY_TIMEOUT_MIN*60UL) { + if (global_thursday_timectr_sec >= THURSDAY_TIMEOUT_MIN*60UL) { // Check if timeout is reached tx_str(PSTR("TOUT Thursday mode timeout\r\n")); set_thursday_mode(0); } - } else { + } else { // When no control button on the front of the door-system is pressed uint8_t st = PINC&1; - if (global_thursday_mode && !st) { + if (global_thursday_mode && !st) { // Open if thursday tx_str(PSTR("THUA Thursday mode auto open\r\n")); _delay_ms(THURSDAY_OPEN_DELAY); open(); - } else if (st == (pidx&1)) { + } else if (st == (pidx&1)) { // Doorcode uint16_t val = TCNT1; if (val > HZ*MIN_PULSE_WIDTH_MS/1000ULL) { pattern[pidx++] = val; |