#include <Keypad.h>
const byte ROWS = 4; // vier Zeilen
const byte COLS = 4; // vier Spalten
#define ledRot 13
#define ledGruen 12
unsigned long previousMillis = 0;
unsigned long currentMillis;
const long interval = 3000;
String code = "123456"; // richtiger Code
String comparecode = ""; // eingegebener Code
int val = 2; // Anzahl der falschen Versuche
// Taster des Keypads
char hexaKeys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
byte rowPins[ROWS] = { 9, 8, 7, 6 }; // Pins für Zeilen
byte colPins[COLS] = { 5, 4, 3, 2 }; // Pins für Spalten
Keypad myKeypad = Keypad(makeKeymap(hexaKeys),
rowPins, colPins, ROWS, COLS); // Instance einer Keypad Klasse
void setup() {
pinMode(13, OUTPUT); // Pin 13 als Ausgang festlegen
pinMode(12, OUTPUT); // Pin 12 als Ausgang festlegen
Serial.begin(9600); // Serielle Verbindung starten
}
void loop() {
char myKey = myKeypad.getKey(); // Taste lesen
currentMillis = millis();
if (myKey) {
comparecode = comparecode + myKey; // Eingegebenen Code speichern
Serial.println(comparecode);
previousMillis = currentMillis;
} else {
if (currentMillis - previousMillis >= interval) { // Wenn länger als 3000ms keine Taste gedrückt wurde
previousMillis = currentMillis;
comparecode = ""; // Eingegebenen Code zurücksetzen
}
}
if (comparecode.length() > 5) { // Wenn der eingegebene Code länger als 5 Zeichen ist
if (code == comparecode) { // Wenn der eingegebene Code richtig ist
correct();
} else { // Wenn der eingegebene Code falsch ist
incorrect(val);
val = val * 2; // Anzahl der falschen Versuche erhöhen
}
}
}
void correct() {
Serial.println("Richtig!");
digitalWrite(ledGruen, HIGH); // Grüne LED einschalten
delay(5000);
digitalWrite(ledGruen, LOW); // Grüne LED ausschalten
comparecode = ""; // Eingegebenen Code zurücksetzen
val = 2; // Anzahl der falschen Versuche zurücksetzen
}
void incorrect(int val) {
Serial.print(val);
Serial.println(" Falsch!");
int i = 0;
while (i < val) { // Anzahl der falschen Versuche blinken
blinken();
i++; // hochzählen
}
comparecode = ""; // Eingegebenen Code zurücksetzen
}
void blinken() {
digitalWrite(ledRot, HIGH); // Rote LED einschalten
delay(500);
digitalWrite(ledRot, LOW); // Rote LED ausschalten
delay(500);
}