#include <Arduino.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
//=======================================================================//
// Keypad
// Keyboard Konfiguration
const byte ROWS = 4;
const byte COLS = 4;
// Keymap für das Keyboard
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// Pinverbindungen erstellen
byte rowPins[ROWS] = {11, 10, 9, 8};
byte colPins[COLS] = {7, 6, 5, 4};
// Keypad-Objekt erstellen
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Variable zum Auslesen des Keypads
char key = 0;
// Sequenzpuffer
String inputSequence = "";
const String sequenceOpen = "123";
// Timer
unsigned long keypad_millis = 0;
unsigned long code_millis = 0;
// Variable zum Tracken des Pads
bool open_tresor = false;
bool wrong_code = false;
//=======================================================================//
//=======================================================================//
// Belegung der Status_LEDS
const byte pin_led_red = 13;
const byte pin_led_green = A0;
// Flags für die LEDs
bool led_red_flag = false;
bool led_green_flag = false;
// Timer für den Serial_Monitor
unsigned long serial_millis = 0;
// Vorausdeklaration der Void-Abschnitte
void serial_monitor();
void update_LCD();
void handle_keypad();
void handle_outputs();
void setup() {
// Starten des Serial_Monitors
Serial.begin(9600);
// Setzen der Ausgänge
pinMode(pin_led_red, OUTPUT);
pinMode(pin_led_green, OUTPUT);
}
void loop() {
// Funktionen aufrufen
serial_monitor();
update_LCD();
handle_keypad();
handle_outputs();
}
//=============================================================//
//==========================FUNCTIONS==========================//
//=============================================================//
void serial_monitor() {
unsigned long serial_timer = millis() - serial_millis;
if (serial_timer > 500) {
serial_millis = millis();
}
}
//=============================================================//
//==========================FUNCTIONS==========================//
//=============================================================//
void update_LCD() {}
//=============================================================//
//==========================FUNCTIONS==========================//
//=============================================================//
void handle_keypad() {
// Variablen für diesen Abschnitt
unsigned long keypad_timer = millis() - keypad_millis;
unsigned long code_timer = millis() - code_millis;
// Abfrage des Keypads und Aktualisierung des globalen Werts
char pressedKey = keypad.getKey();
if (pressedKey) {
key = pressedKey;
}
if (key) {
Serial.print("Pad.Key: ");
Serial.print(key);
inputSequence += key;
Serial.print(" Code: ");
Serial.println(inputSequence);
key = 0;
}
if (inputSequence.length() == 3) {
if (inputSequence == sequenceOpen) {
Serial.println(" Tresor offen");
open_tresor = true;
} else {
Serial.println("Falscher Code");
wrong_code = true;
}
inputSequence = "";
}
if (!wrong_code) {
code_millis = millis();
} else if (wrong_code && code_timer > 5000) {
wrong_code = false;
}
if (!open_tresor) {
keypad_millis = millis();
} else if (open_tresor && keypad_timer > 5000) {
open_tresor = false;
}
}
//=============================================================//
//==========================FUNCTIONS==========================//
//=============================================================//
void handle_outputs() {
digitalWrite(pin_led_green, open_tresor);
digitalWrite(pin_led_red, wrong_code);
}
//=============================================================//
//==========================FUNCTIONS==========================//
//=============================================================//