aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlonkaars <loek@pipeframe.xyz>2021-10-08 12:20:13 +0200
committerlonkaars <loek@pipeframe.xyz>2021-10-08 12:20:13 +0200
commit9a5ef6b9264b72ef8b3c6ac305b74952909a27ee (patch)
tree333024e1c7ca8a5ef111e0b7fa34ec317d14c07b
parentbeb92a1862367ffeb84728f09808f17776023fb7 (diff)
werkende kluis
-rw-r--r--main/main.ino83
1 files changed, 41 insertions, 42 deletions
diff --git a/main/main.ino b/main/main.ino
index d4b765b..fcdf3e5 100644
--- a/main/main.ino
+++ b/main/main.ino
@@ -15,26 +15,32 @@
* 11 (E) -> 4 & 5
*/
-int kb_rows[] = { KB_ROW_1, KB_ROW_2, KB_ROW_3, KB_ROW_4 };
-int kb_cols[] = { KB_COL_1, KB_COL_2, KB_COL_3 };
+const int kb_rows[] = { KB_ROW_1, KB_ROW_2, KB_ROW_3, KB_ROW_4 };
+const int kb_cols[] = { KB_COL_1, KB_COL_2, KB_COL_3 };
#define LED_R 0
#define LED_G 1
#define LED_Y 2
-int led_pinouts[] = { PINOUT_LED_R, PINOUT_LED_G, PINOUT_LED_Y };
+const int led_pinouts[] = { PINOUT_LED_R, PINOUT_LED_G, PINOUT_LED_Y };
unsigned long led_timings[] = { 0, 0, 0 };
bool led_status[] = { 0, 0, 0 };
unsigned char kb[12], kb_old[12];
-unsigned char correct_code[] = { 0, 0, 0, 0 };
+unsigned char correct_code[MAX_CODE_LEN];
+unsigned int correct_code_len = 4;
+
unsigned char code[MAX_CODE_LEN];
unsigned int codei = 0;
+/** @brief informatie over toets die `void kb_onevent()` mee krijgt */
typedef struct {
+ /** @brief kb[12] index van de toets */
unsigned char key;
+ /** @brief true als de toets wordt ingedrukt */
bool down;
+ /** @brief tijd van toetsaanslag */
unsigned long timestamp;
} kb_event;
@@ -99,10 +105,7 @@ void debug_print_arr(unsigned char x[12]) {
Serial.print("]\n");
}
-/**
- * @brief functie die uitgevoerd wordt als
- * de verkeerde code is ingevoerd
- */
+/** @brief wordt uitgevoerd wanneer de verkeerde code is ingevoerd */
void wrong_code_routine() {
tone(PINOUT_BUZZ, BUZZ_SAD);
digitalWrite(PINOUT_LED_R, HIGH);
@@ -113,10 +116,7 @@ void wrong_code_routine() {
noTone(PINOUT_BUZZ);
}
-/**
- * @brief functie die uitgevoerd wordt als
- * de juiste code is ingevoerd
- */
+/** @brief wordt uitgevoerd wanneer de juiste code is ingevoerd */
void unlock_routine() {
tone(PINOUT_BUZZ, BUZZ_HAPPY);
digitalWrite(PINOUT_RELAIS, HIGH);
@@ -129,6 +129,32 @@ void unlock_routine() {
noTone(PINOUT_BUZZ);
}
+/** @brief wordt uitgevoerd wanneer "E" wordt ingedrukt */
+void check_code() {
+ bool correct = true;
+
+ // check lengte
+ if (codei != correct_code_len) return wrong_code_routine();
+
+ for (int i = 0; i < correct_code_len; i++) {
+ if (correct_code[i] == code[i]) continue;
+
+ // dit voert alleen uit als een van
+ // de getallen in code[] niet gelijk is aan correct_code[]
+ correct = false;
+ break;
+ }
+
+ // debug
+ Serial.print(correct, DEC);
+
+ // kijk mama zonder haakjes!
+ if (correct)
+ unlock_routine();
+ else
+ wrong_code_routine();
+}
+
/**
* @brief event handler voor het toetsenbord
* (voert elke keer uit wanneer de toestand van een toets verandert)
@@ -141,38 +167,15 @@ void kb_onevent(kb_event ev) {
switch (ev.key) {
case KB_KEY_C: {
- Serial.println("C");
- // TODO: kijk of sizeof() werkt voor arrays
- memset(&code, 0, sizeof(code));
+ // leeg code[]
+ memset(&code, 0, MAX_CODE_LEN);
codei = 0;
break;
}
case KB_KEY_E: {
- Serial.println("E");
- //TODO: array length
- int correct_code_len = 3;
- bool correct = true;
-
- if (codei != correct_code_len) break;
- for (int i = 0; i < correct_code_len; i++) {
- if (correct_code[i] == code[i]) continue;
-
- // dit voert alleen uit als een van
- // de getallen in code[] niet gelijk is aan correct_code[]
- correct = false;
- break;
- }
-
- // debug
- Serial.print(correct, DEC);
-
- // kijk mama zonder haakjes!
- if (correct)
- unlock_routine();
- else
- wrong_code_routine();
+ check_code();
break;
}
@@ -188,10 +191,6 @@ void kb_onevent(kb_event ev) {
// voeg getal toe aan het einde van de code
code[codei] = num;
codei++;
-
- Serial.print("adding ");
- Serial.print(num, DEC);
- Serial.print(" to code\n");
}
}
}