Hallo!
Ich würde gerne für einen Geocache ein Türschloss mit einer 4 stelligen Zahl benutzen. Nach einiger Recherche bin ich schließlich zu folgendem gelangt:
#include <Keypad.h>
char* secretCode = "1234";
int position = 0;
boolean locked = true;
const byte rows = 4;
const byte cols = 3;
char keys[rows][cols] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[rows] = {9, 8, 7, 6};
byte colPins[cols] = {4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
int redPin = 11;
int greenPin = 12;
int yellowPin=1;
int magnetpin=13;
int buzzer=10;
void setup()
{
pinMode(redPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(magnetpin, OUTPUT);
pinMode (buzzer, OUTPUT);
updateOutputs();
}
void loop()
{
char key = keypad.getKey();
if (key == '#')
{
position = 0;
digitalWrite(yellowPin, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
}
if (key == secretCode[position])
{
position ++;
}
if (position == 4)
{
locked=false;
updateOutputs();
}
delay(100);
}
void updateOutputs()
{
if (locked)
{
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
digitalWrite(magnetpin, LOW);
}
else
{
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
digitalWrite(buzzer, HIGH);
digitalWrite(magnetpin, HIGH);
delay(5000);
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
digitalWrite(buzzer, LOW);
digitalWrite(magnetpin, LOW);
}
}
soweit so gut, allerdings hätte ich gerne, dass nach der Eingabe vier falscher Tasten eine Lampe leuchtet und die Eingabe gleich zurückgesetzt wird, anstatt jedes Mal # zum Zurücksetzen drücken zu müssen.
Bin für jeden Rat dankbar