Hej! Kul att du börjat komma igång.
Jag har städat upp lite i koden, för att slippa upprepa samma kod flera gånger. I övrigt har jag bara lagt till en delay och en ny "Welcome"-prompt efter "PASSERA". Har inte kunnat testa koden eftersom jag inte har de bibliotek som behövs men funkar det inte får du posta felmeddelandet så försöker vi felsöka tillsammans.
#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
Password password = Password("12345"); // password
int dlugosc = 5; // length of the password
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int ledRed = 23;
int ledGreen = 25;
int buzzer = 27;
int ilosc; // number of clicks
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = { 34, 32, 30, 36 };
byte colPins[COLS] = { 28, 26, 24, 22 };
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
{
Serial.begin(9600);
keypad.addEventListener(keypadEvent);
pinMode(ledRed, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(buzzer, OUTPUT);
setState(false);
printWelcome();
}
void printWelcome() {
lcd.clear();
lcd.begin(16, 2);
lcd.setCursor(1, 0);
lcd.print(" :Welcome:");
lcd.setCursor(0, 1);
lcd.print(" ANGE PINKOD ");
}
void loop()
{
keypad.getKey();
}
void keypadEvent(KeypadEvent eKey)
{
switch (keypad.getState())
{
case PRESSED:
int i;
for ( i = 1; i <= 1; i++ )
{
buzz(50);
}
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey)
{
/*
case '#':
break;
case '*':
break;
*/
default:
ilosc = ilosc + 1;
password.append(eKey);
}
//Serial.println(ilosc);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(" < PIN >");
lcd.setCursor(0, 1);
for (byte i = 0; i < ilosc; i++) {
lcd.print("*");
}
if (ilosc != 8) {
lcd.print("_");
}
if (ilosc == dlugosc)
{
delay(250);
checkPassword();
ilosc = 0;
}
}
}
void checkPassword()
{
if (password.evaluate())
{
int i;
for ( i = 1; i <= 2; i++ )
{
buzz(70);
}
ilosc = 0;
Serial.println("Success");
setState(true);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(" << PASSERA >>");
delay(10000); // Låt det vara öppet i 10 sekunder
setState(false); // Stäng
printWelcome();
return;
}
else
{
int i;
for ( i = 1; i <= 1; i++ )
{
buzz(200);
}
ilosc = 0;
password.reset();
Serial.println("Wrong");
setState(false);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(" < FEL KOD >");
delay(2000);
printWelcome();
}
}
void buzz (unsigned int milliseconds) {
digitalWrite(buzzer, HIGH);
delay(milliseconds);
digitalWrite(buzzer, LOW);
delay(milliseconds);
}
void setState(boolean isopen) {
digitalWrite(ledGreen, isopen);
digitalWrite(ledRed, !isopen );
}