Probleme mit Programmcode für Türschloßprojekt

ok. Wie ich oben ganz am Anfang geschrieben habe: Ich bin Anfänger auf dem Gebiet, dass heißt so ziemlich 50% der letzten Posts sind für mich Böhmsche Dörfer :frowning:
Ich versuchs mal zu erklären. Der Sketch und die dafür benötigten Librarys habe ich mittels des Lehrbuchs: "Die elektronische Welt mit Arduino entdecken" geschrieben, dass heißt was da steht hab ich eingetippt und die Sktech Erklärung dazu habe ich versucht zu verstehen.

Ich versuche jetzt mal mein Problem genau wie möglich in Worte zu fassen:

Die Header Datei die für das Projekt angelegt wurde:

#ifndef MYKEYPAD_H
#define MYKEYPAD_H

#if ARDUINO < 100
#include <WProgram.h>
#else
#include <Arduino.h>
#endif

#define KEY_NOT_PRESSED '-'
#define KEY_1 '1'
#define KEY_2 '2'
#define KEY_3 '3'
#define KEY_4 '4'
#define KEY_5 '5'
#define KEY_6 '6'
#define KEY_7 '7'
#define KEY_8 '8'
#define KEY_9 '9'
#define KEY_0 '0'
#define KEY_star 'stern'
#define KEY_hash 'raute'

class MyAnalogKeyPad{
public:
MyAnalogKeyPad (byte analogPin); // Parametrisierter Konstruktor
void setDebounceTime(unsigned int debounceTime); // setzen der Prellzeit
void setThresholdValue(byte tv); // setzen der Threshold (Grenzwert)
char readKey(); // Ermitteln des gedrückten Tasters auf Keypad
private:
byte analogPin; // analoger Pin zur Messwertaufnahme
unsigned long debounceTime; // private Variable für die Prellzeit
long lastValue; // letzte Zeit der millis-Funktion
byte threshold; // Toleranzwert
};
#endif

nun poste ich die cpp Datei:

#include "MyAnalogKeyPad.h" // Parametrisierter Konstruktor

MyAnalogKeyPad::MyAnalogKeyPad(byte ap){
analogPin = ap; // Analog Pin für Messwertaufnahme
debounceTime= 300; // Initialwert für DebounceTime festlegen
threshold = 5; // Toleranzwert festlegen
}

void MyAnalogKeyPad::setDebounceTime(unsigned int time){ // Methode zum Setzen der Prellzeit
debounceTime = time;
}

void MyAnalogKeyPad::setThresholdValue(byte tv){ // Methode zum Setzen der Tolleranz
threshold = tv;
}

char MyAnalogKeyPad::readKey(){ // Methode zum Ermitteln des gedrückten Tasters auf dem Keypad
char key = KEY_NOT_PRESSED; // Initialwert von key ist "KEY_NOT_PRESSED" (nichts ist gedrückt)
byte aValue = analogRead(analogPin);
if((aValue > 0)&&(millis()- lastValue >= debounceTime)){
if((aValue > (176 - threshold))&&(aValue < (176 + threshold)))
key = KEY_1;
if((aValue > (163 - threshold))&&(aValue < (163 + threshold)))
key = KEY_2;
if((aValue > (149 - threshold))&&(aValue < (149 + threshold)))
key = KEY_3;
if((aValue > (136 - threshold))&&(aValue < (136 + threshold)))
key = KEY_4;
if((aValue > (122 - threshold))&&(aValue < (122 + threshold)))
key = KEY_5;
if((aValue > (108 - threshold))&&(aValue < (108 + threshold)))
key = KEY_6;
if((aValue > (94 - threshold))&&(aValue < (94 + threshold)))
key = KEY_7;
if((aValue > (79 - threshold))&&(aValue < (79 + threshold)))
key = KEY_8;
if((aValue > (64 - threshold))&&(aValue < (64 + threshold)))
key = KEY_9;
if((aValue > (48 - threshold))&&(aValue < (48 + threshold)))
key = KEY_star;
if((aValue > (32 - threshold))&&(aValue < (32 + threshold)))
key = KEY_0;
if((aValue > (15 - threshold))&&(aValue < (15 + threshold)))
key = KEY_hash;

lastValue = millis();
}
return key;
}

Der passende Sketch wurde ja schon zu Anfang gepostet.

Nun beschreibe ich euch mal meinen aktuellen Standpunkt:

Das Programm funktioniert in sofern das ich wenn die Zahlen 9200, also der in CODE gespeicherte Wert eingegeben wird ein I/O Port geschaltet wird... Tür geht auf.
Wenn die Falschen Zahlen eingegeben werden geht die Tür nicht auf. Die beiden Zeichen will ich mal rauslassen weil da läuft´s nicht so richtig wenn die eingetippt werden spielt der Sketch irgendwie die Reise nach Jerusalem :slight_smile:

Ok hab ich mir gedacht dann überbrückst du die beiden Schalter halt und dann hat sichs. Nun möchte ich aber das man mit der Kombination #100 oder *100 oder irgend einer Kombination mit den Zeichen in eine Menüeebene kommt um da z.B. das Kennwort zu ändern. Jetzt steh ich vor dem Problem das die Sonderzeichen ja nicht funktionieren... das is ja schonmal schlecht. Hab ich mir gedacht, komm egal, nimmste als Kombination die dich ins Menü bringt eben 0000, dann fällt die Kombination eben als mögliche Kennwortkombination weg.... bleiben ja immer noch genug.

Jetzt geb ich also 0000 ein und komme in das Menü - bis dahin klappts.
Nun lasse ich am Display anzeigen :
Auswahl:
1 = Code aendern

Jetzt will ich das ich wenn ich eine 1 eintippe (nur eine 1 nicht 0001) das ich dann in die Ebene zum Menü ändern komme. Tippe ich nun 1 ein, passiert nichts... Da bin ich aber glaube ich selbst auf das Problem gestoßen. Ich müsste ein Array anlegen was nur eine Zahl speichert und nicht [5] oder ? Whatever gebe ich nun halt 0001 ein bekomme ich angezeigt Coder verweigert und er springt wider an den Anfang. Das heißt er scheint nicht zu verstehen das er nun eine Ebene höher ist und die Eingaben hier nicht mit den Vorgaben der Ebene für die Codeeingabe verglichen werden sollen.

Könnt ihr mir hier eine Tipp geben wie man das Problem lösen kann, vielleicht auch mit Begründung, damit ich es verstehe?

Schonmal vielen Dank,

Tobias