Hjälp med att starta om void loop

Hej på er!

Jag är välllldigt ny på det här och behöver hjälp innan jag blir galen....

Jag hittade en tutorial som jag fann intressant, har kopplat upp allting och laddat koden och allt funkar som det är tänkt. Men, jag försöker få till en ändring i koden och får ingen ordning på det.....

Projektet är ett kodlås, bestående av en Arduino Mega, en keypad, en 16x2 display och ett par lysdioder.
Ganska basic, röd lysdiod lyser och man uppmanas i displayen att ange pinkod. Slår man fel kod börjar allt om. Slår man rätt kod tänds grön lysdiod och och medelandet i displayen ändras. Problemet är att när man angivit rätt pinkod stannar liksom programmet där ända tills man på nytt knappat in fem tangenter. Jag skulle vilja att efter rätt pinkod är inslagen skall det gå typ 10 sekunder och sedan återgår programmet till sitt utgångsläge, dvs. röd diod och en uppmaning att knappa in pinkod....

Förslag någon?

#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);

digitalWrite(ledRed, HIGH);
digitalWrite(ledGreen, LOW);

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++ )
{
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
delay(50);
}

Serial.print("Pressed: ");
Serial.println(eKey);

switch (eKey)
{
/*
case '#':
break;

case '*':
break;
*/

default:
ilosc=ilosc+1;
password.append(eKey);
}
//Serial.println(ilosc);

if(ilosc == 1)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("");
}
if(ilosc == 2)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("**
");
}
if(ilosc == 3)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("
_");
}
if(ilosc == 4)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("
");
}
if(ilosc == 5)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("*****
");
}
if(ilosc == 6)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("
_");
}
if(ilosc == 7)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("
***_");
}
if(ilosc == 8)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" < PIN >");
lcd.setCursor(0,1);
lcd.print("********");
}

if(ilosc == dlugosc)
{
delay(250);
checkPassword();
ilosc = 0;
}
}
}

void checkPassword()
{
if (password.evaluate())
{
int i;
for( i = 1; i <= 2; i++ )
{
digitalWrite(buzzer, HIGH);
delay(70);
digitalWrite(buzzer, LOW);
delay(70);
}
ilosc = 0;

Serial.println("Success");

digitalWrite(ledRed, LOW);
digitalWrite(ledGreen, HIGH);

lcd.clear();
lcd.setCursor(0,1);
lcd.print(" << PASSERA >>");
return;
}
else
{
int i;
for( i = 1; i <= 1; i++ )
{
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
}
ilosc = 0;
password.reset();

Serial.println("Wrong");

digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, HIGH);

lcd.clear();
lcd.setCursor(0,1);
lcd.print(" < FEL KOD >");
delay(2000);

lcd.clear();
lcd.setCursor(1,0);
lcd.print(" :Welcome:");
lcd.setCursor(0,1);
lcd.print("PLEASE ENTER PIN");
}
}

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 );
}