diff options
Diffstat (limited to 'main')
-rw-r--r-- | main/constants.h | 9 | ||||
-rw-r--r-- | main/main.ino | 100 |
2 files changed, 56 insertions, 53 deletions
diff --git a/main/constants.h b/main/constants.h index 89847d8..ea1d31e 100644 --- a/main/constants.h +++ b/main/constants.h @@ -1,9 +1,11 @@ #define SERIAL_BAUD 115200 -#define MAX_CODE_LEN 1024 +#define MAX_CODE_LEN 64 #define KB_DEBOUNCE_DELAY 100 -#define BUZZ_HAPPY 1000 -#define BUZZ_SAD 700 +#define BUZZ_OPEN 1000 +#define BUZZ_WRONG 700 +#define BUZZ_NUM 1200 +#define BUZZ_CLEAR 900 #define PINOUT_KBM7 4 #define PINOUT_KBM6 5 @@ -39,3 +41,4 @@ #define KB_KEY_C 9 #define KB_KEY_0 10 #define KB_KEY_E 11 +#define KB_KEY_SET 12 diff --git a/main/main.ino b/main/main.ino index 578ce34..67222ee 100644 --- a/main/main.ino +++ b/main/main.ino @@ -1,18 +1,19 @@ #include "constants.h" -/** KB -> arduino pin mapping - * 0 (1) -> 8 & 9 - * 1 (2) -> 8 & 7 - * 2 (3) -> 8 & 5 - * 3 (4) -> 12 & 9 - * 4 (5) -> 12 & 7 - * 5 (6) -> 12 & 5 - * 6 (7) -> 6 & 9 - * 7 (8) -> 6 & 7 - * 8 (9) -> 6 & 5 - * 9 (C) -> 4 & 9 - * 10 (0) -> 4 & 7 - * 11 (E) -> 4 & 5 +/** BN (KB) -> PIN & PIN + * 1 (0) -> D8 & D9 + * 2 (1) -> D8 & D7 + * 3 (2) -> D8 & D5 + * 4 (3) -> D12 & D9 + * 5 (4) -> D12 & D7 + * 6 (5) -> D12 & D5 + * 7 (6) -> D6 & D9 + * 8 (7) -> D6 & D7 + * 9 (8) -> D6 & D5 + * C (9) -> D4 & D9 + * 0 (10) -> D4 & D7 + * E (11) -> D4 & D5 + * SET (12) -> GND & A1 */ const int kb_rows[] = { KB_ROW_1, KB_ROW_2, KB_ROW_3, KB_ROW_4 }; @@ -26,8 +27,11 @@ const int led_pinouts[] = { PINOUT_LED_R, PINOUT_LED_G, PINOUT_LED_Y }; unsigned long led_timings[3]; bool led_status[3]; -unsigned long kb_timings[12]; -unsigned char kb[12], kb_old[12]; +#define KB_KEYCOUNT 13 +unsigned long kb_timings[KB_KEYCOUNT]; +unsigned char kb[KB_KEYCOUNT], kb_old[KB_KEYCOUNT]; + +bool set_mode = false; unsigned char correct_code[MAX_CODE_LEN]; unsigned int correct_code_len = 4; @@ -37,7 +41,7 @@ unsigned int codei = 0; /** @brief informatie over toets die `void kb_onevent()` mee krijgt */ typedef struct { - /** @brief kb[12] index van de toets */ + /** @brief kb[] index van de toets */ unsigned char key; /** @brief true als de toets wordt ingedrukt */ bool down; @@ -54,6 +58,9 @@ void setup() { pinMode(KB_COL_2, INPUT_PULLUP); pinMode(KB_COL_3, INPUT_PULLUP); + // set knop (met externe pull-up) + pinMode(PINOUT_SET, INPUT); + // keyboard rijen als output pinMode(KB_ROW_1, OUTPUT); pinMode(KB_ROW_2, OUTPUT); @@ -76,7 +83,7 @@ void setup() { pinMode(PINOUT_BUZZ, OUTPUT); } -/** @brief scan het toetsenbord en stop alles in `kb[12]` */ +/** @brief scan het toetsenbord en de set knop */ void kb_scan() { // kopieer kb naar kb_old memcpy(&kb_old, kb, sizeof(kb_old)); @@ -94,26 +101,8 @@ void kb_scan() { digitalWrite(kb_rows[row], HIGH); } -} -/** @brief debug functie die een getallen array als JSON print */ -void debug_print_arr(unsigned char x[12]) { - Serial.print("["); - for(int i = 0; i < 12; i++) { - Serial.print(x[i], DEC); - if (i != 11) Serial.print(", "); - } - Serial.print("]\n"); -} - -/** @brief debug functie die de huidige ingevoerde code print */ -void debug_print_code() { - Serial.print("code: "); - for(int i = 0; i < codei; i++) { - Serial.print(code[i], DEC); - if (i < codei - 1) Serial.print(","); - } - Serial.print("\n"); + kb[KB_KEY_SET] = !digitalRead(PINOUT_SET); } // wat zou deze functie toch doen @@ -124,8 +113,7 @@ void clear_code() { /** @brief wordt uitgevoerd wanneer de verkeerde code is ingevoerd */ void wrong_code_routine() { - Serial.println("verkeerde code"); - tone(PINOUT_BUZZ, BUZZ_SAD); + tone(PINOUT_BUZZ, BUZZ_WRONG); digitalWrite(PINOUT_LED_R, HIGH); delay(1e3); // shorthand voor 1000 @@ -137,9 +125,8 @@ void wrong_code_routine() { } /** @brief wordt uitgevoerd wanneer de juiste code is ingevoerd */ -void unlock_routine() { - Serial.println("juiste"); - tone(PINOUT_BUZZ, BUZZ_HAPPY); +void correct_code_routine() { + tone(PINOUT_BUZZ, BUZZ_OPEN); digitalWrite(PINOUT_RELAIS, HIGH); digitalWrite(PINOUT_LED_G, HIGH); @@ -170,7 +157,7 @@ void check_code() { // kijk mama zonder haakjes! if (correct) - unlock_routine(); + correct_code_routine(); else wrong_code_routine(); } @@ -188,22 +175,38 @@ void kb_onevent(kb_event ev) { kb_timings[ev.key] = ev.timestamp; if (bounce) return; - // korte pieptoon als een nummertoets of *clear* wordt ingedrukt - if (ev.key != KB_KEY_E) tone(PINOUT_BUZZ, BUZZ_HAPPY, 200); - switch (ev.key) { case KB_KEY_C: { + tone(PINOUT_BUZZ, BUZZ_CLEAR, 200); clear_code(); + break; } case KB_KEY_E: { - check_code(); + if (!set_mode) { + check_code(); + } else { + // stel nieuwe code in (set mode aan) + memcpy(&correct_code, code, sizeof(correct_code)); + correct_code_len = codei; + clear_code(); + set_mode = false; + } + + break; + } + + case KB_KEY_SET: { + clear_code(); + set_mode = true; + break; } // Overige toetsen (nummers) default: { + tone(PINOUT_BUZZ, BUZZ_NUM, 200); led_set_timeout(LED_Y, 200); // bereken getal op toets @@ -215,8 +218,6 @@ void kb_onevent(kb_event ev) { codei++; //TODO: fix array out of bounds crash } } - - debug_print_code(); } /** @@ -224,7 +225,7 @@ void kb_onevent(kb_event ev) { * wanneer de toestand van een toets verandert */ void kb_event_gen() { - for(int i = 0; i < 12; i++) { + for(int i = 0; i < KB_KEYCOUNT; i++) { // ga door naar de volgende iteratie // als de toetsen niet veranderd zijn if (kb[i] == kb_old[i]) continue; @@ -275,4 +276,3 @@ void loop() { kb_event_gen(); led_update(); } - |