Arduino Leonardo Codeschloss

Hallo liebe Gemeinde,
die ganzen Tage bin ich nun schon am tüfteln aber ich hänge bei der Codeschaltung fest bzw. nur an dem Punkt wo ich nach einer korrekten Codeeingabe eine variable Zeit brauche. Damit meine ich, Code eingeben und die grüne Led springt nur für 1-2 Sekunden an, das variabel sein sollte und auch die Rautetaste sollte ich nicht brauchen müssen.
Der Sourcecode

#include <Keypad.h>

char* secretCode = "235711";
int position = 0;

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] = {4, 5, 6, 7};
byte colPins[cols] = {1, 2, 3};

Keypad keypad = Keypad(makeKeymap(keys), 
                       rowPins, colPins,
                       rows, cols);

int redPin = 8;
int greenPin = 9;

void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  setLocked(true);
}

void loop()
{
  char key = keypad.getKey();
  if (key == '*' || key == '#') {
    position = 0;
    setLocked(true);
  }
  
  if (key == secretCode[position]) {
    position++;
  }
  
  if (position == 6) {
    setLocked(false);
  }
  delay(50);
}

void setLocked(int locked)
{
  if (locked) {
    digitalWrite(redPin, HIGH);
    digitalWrite(greenPin, LOW);
  }
  else {
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, HIGH);
  }
}

Ok, jetzt nochmal zum Mitschreiben. :wink:
Du hast eine physikalische Zahlentastatur mit "0"-"9", "*" und "#", eine rote und eine grüne LED und willst damit ein Codeschloss realisieren.
Die rote LED soll standardmäßig leuchten, und nur, wenn der Code korrekt eingegeben wurde, soll die grüne LED leuchten.

Ich interpretiere was Du geschrieben hast so, dass die grüne LED nur für 1-2 Sekunden leuchten, sprich: Das Schloss geöffnet sein soll (wo willst Du das einstellen können?), aber was hat das mit der Rautetaste zu tun? In Deinem Code wird die ja als Reset für das Schloss benutzt, wie die Stern-Taste auch...?

Dein Code hat einen leicht zu übersehenden Fehler. Wenn Du eine falsche Ziffer eingibst, wird die Eingabeprozedur nicht zurückgesetzt. Somit kann ich einfach sechs Mal hintereinander die Ziffern 0 bis 9 drücken und habe das Schloss immer offen. Ich denke nicht, dass das so gedacht ist.

Was pylon meint ist Du mußt n Zahlen einlesen (n ist die Länge des geheimen Schlüssels; in Deinem Fall 6) und dann kontrollieren on die 2 Zahlen gleich sind. und dann wieder bei null beginnen.
So wie Du es machst wartest Du auf n aus unendlich richtige Zahlen zwischen den richtigen Zahlen können x beliebig viele falsche sein.
Grüße Uwe