aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main/constants.h9
-rw-r--r--main/main.ino100
-rw-r--r--readme.md4
3 files changed, 58 insertions, 55 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();
}
-
diff --git a/readme.md b/readme.md
index 7ae7e48..1ab48bd 100644
--- a/readme.md
+++ b/readme.md
@@ -5,7 +5,7 @@
## Dingen die nog gedaan moeten worden
- Code veranderen door de SET knop aan de binnenkant van de kluis in te drukken
-- Index out of bounds crash wanneer er meer dan 1024 cijfers ingetoetst worden
+- Index out of bounds crash wanneer er meer dan MAX_CODE_LEN cijfers ingetoetst worden
- Heel misschien een grappige easter egg ofzo
## Coole functies
@@ -14,7 +14,7 @@
- Niet-blokkerende LED functie
- Overmatig veel gebruik van `#define` voor pinouts en alles
- Debounce correctie
-- Code's die tot wel 1024 getallen lang kunnen zijn
+- Code's die veel te lang kunnen zijn
- De enige blokkerende routine's zijn om de kluis te openen en te schreeuwen
tegen de gebruiker dat de code fout is
- Ongeveer zoveel commentaar als daadwerkelijke code