Probleme mit Zahlenschloss

Hallo,

mit meinen ersten Arduino versuchen scheiter ich gerade an einem Zahlenschloss.
Ich bin dabei ein Geocache zu bauen aus einem alten Münztelefon.
Nimmt man den Hörer ab läuft das Lied Skandal im Sperrbezirk, gibt man auf dem Tastenfeld des Telefons die Nummer von Rosi ein öffent sich das Münzfach.

Dies Funktioniert auch soweit, anbei der Code.

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Keypad.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek hochladen
LiquidCrystal_I2C lcd(0x27, 16, 2);  //Hier wird das Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen). In unserem Fall „lcd“. Die Adresse des I²C Displays kann je nach Modul variieren.
#define Password_Lenght 6 // Give enough room for six chars + NULL char


char Data[Password_Lenght]; // 6 is the number of chars it can hold + the null char = 7
char Master[Password_Lenght] = "32168"; 
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;

//Hier wird die größe des Keypads definiert
const byte COLS = 3; //3 Spalten
const byte ROWS = 4; //4 Zeilen
char keys[ROWS][COLS]={
{'#','0','*'},
{'9','8','7'},
{'6','5','4'},
{'3','2','1'}
};

byte colPins[COLS] = {2,3,4,}; //Definition der Pins für die 3 Spalten
byte rowPins[ROWS] = {5,6,7,8}; //Definition der Pins für die 4 Zeilen

 Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad 

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
   lcd.init(); //Im Setup wird der LCD gestartet
   lcd.backlight(); //Hintergrundbeleuchtung einschalten (0 schaltet die Beleuchtung aus).
   pinMode(9, OUTPUT); // Pin 9 ist ein Ausgang.
   digitalWrite(9, LOW);
   
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));
  
  myDFPlayer.volume(15);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}


void loop()
{
  lcd.setCursor(0,0);
  lcd.print("W\xE1hle Rosis Nr.");

  customKey = customKeypad.getKey();
  if (customKey) // makes sure a key is actually pressed, equal to (customKey != NO_KEY)
  {
    Data[data_count] = customKey; // store char into data array
    lcd.setCursor(data_count,1); // move cursor to show each new char
    lcd.print(Data[data_count]); // print char at said cursor
    data_count++; // increment data array by 1 to store new char, also keep track of the number of chars entered
  }

  if(data_count == Password_Lenght-1) // if the array index is equal to the number of expected chars, compare data to master
  {
    lcd.clear();
    lcd.setCursor(0, 0);
   

    if(!strcmp(Data, Master)) // equal to (strcmp(Data, Master) == 0)
      { 
        myDFPlayer.play(2);
        delay(20);
        myDFPlayer.volume(30);
        delay(2000);
        lcd.print("Verbinde.");
        delay(1000);
        lcd.clear();
        lcd.print("Verbinde..");
        delay(1000);
        lcd.clear();
        lcd.print("Verbinde...");
        delay(1000);
        lcd.clear();
        lcd.print("Verbinde.");
        delay(1000);
        lcd.clear();
        lcd.print("Verbinde..");
        delay(1000);
        lcd.clear();
        lcd.print("Verbinde...");
        delay(1000);
        lcd.clear();
        lcd.print("Verbunden");
        digitalWrite(9, HIGH);
        delay(1000);
        myDFPlayer.pause();
        digitalWrite(9, LOW);
        delay(999999999999999999999999999999999999);
      }
      
      else
      {
        lcd.print("Verwaehlt");
        delay(2000);// added 1 second delay to make sure the password is completely shown on screen before it gets cleared.
        lcd.clear();
        clearData();
        
        
      } 
           
  }

}
void clearData()
{
  while(data_count !=0)
  {   // This can be used for any array size, 
    Data[data_count--] = 0; //clear array for new data
  }
  return;
}

Nun hätte ich bei jedem Tastendruck gern noch verschieden Tonwahltöne abgespielt.
Auch das Funktioniert soweit, anbei der Code.

#include <Keypad.h> //Bibliothek zum auslesen der Matrix Tastatur
#include "SoftwareSerial.h" 
#include "DFRobotDFPlayerMini.h"
//Definieren der Zeilen und Spalten.
//Wenn eine größere Tastatur verwendet wird,
//muss das hierdefiniert werden.
const byte COLS = 3;
const byte ROWS = 4;
 
//Definieren der Pins, über welche die Matrix Tastatur
//mit dem Microcontroller verbunden wurde.
const byte COL_PINS[COLS] = { 2, 3, 4 }; 
const byte ROW_PINS[ROWS] = { 5, 6, 7, 8 };
//Da der Datentyp char nur ein Zeichen aufnehmen kann, 
//verwende ich ab der Zahl 10 die Buchstaben A bis G.
const char KEYS[ROWS][COLS]={
{'#','0','*'},
{'9','8','7'},
{'6','5','4'},
{'3','2','1'}
};
 
//Initialisieren des KeyPad Objektes 
Keypad customKeypad = Keypad(makeKeymap(KEYS), ROW_PINS, COL_PINS, ROWS, COLS);

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
 
void setup() {
  //Begin der seriellen Kommunikation mit 9600 baud.
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);

  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));
  
  myDFPlayer.volume(15);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}
  

 
void loop() {
  //lesen ob eine Taste gedrückt wurde
  char key = customKeypad.getKey();
  //Wenn eine Taste gedrückt wurde, 
  //dann den Wert auswerten.
  if (key) { 
    switch (key){
      case '1': myDFPlayer.advertise(1); break;
      case '2': myDFPlayer.advertise(2); break;
      case '3': myDFPlayer.advertise(3); break;
      case '4': myDFPlayer.advertise(4); break;
      case '5': myDFPlayer.advertise(5); break;
      case '6': myDFPlayer.advertise(6); break;
      case '7': myDFPlayer.advertise(7); break;
      case '8': myDFPlayer.advertise(8); break; 
      case '9': myDFPlayer.advertise(9); break; 
      case '0': myDFPlayer.advertise(10); break;
      case '*': myDFPlayer.advertise(11); break;
      case '#': myDFPlayer.advertise(12); break;
 
        Serial.println("!!! Keine Funktion hinterlegt !!!");
      break;
    }
    Serial.print("Die Taste ");
    Serial.print(key);
    Serial.println(" wurde gedrueckt");
  }
}

Und wo ist jetzt Dein Problem, wenn alles gut funktioniert?

Gruß Tommy

Nun würde ich die beiden Codes gern verbinden und da hab ich so meine Probleme, anbei mein Code Versuch.

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Keypad.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek hochladen
LiquidCrystal_I2C lcd(0x27, 16, 2);  //Hier wird das Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen). In unserem Fall „lcd“. Die Adresse des I²C Displays kann je nach Modul variieren.
#define Password_Lenght 6 // Give enough room for six chars + NULL char


char Data[Password_Lenght]; // 6 is the number of chars it can hold + the null char = 7
char Master[Password_Lenght] = "32168"; 
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;

//Hier wird die größe des Keypads definiert
const byte COLS = 3; //3 Spalten
const byte ROWS = 4; //4 Zeilen
char keys[ROWS][COLS]={
{'#','0','*'},
{'9','8','7'},
{'6','5','4'},
{'3','2','1'}
};

byte colPins[COLS] = {2,3,4,}; //Definition der Pins für die 3 Spalten
byte rowPins[ROWS] = {5,6,7,8}; //Definition der Pins für die 4 Zeilen

 Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad 

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
   lcd.init(); //Im Setup wird der LCD gestartet
   lcd.backlight(); //Hintergrundbeleuchtung einschalten (0 schaltet die Beleuchtung aus).
   pinMode(9, OUTPUT); // Pin 9 ist ein Ausgang.
   digitalWrite(9, LOW);
   
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));
  
  myDFPlayer.volume(15);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}


void loop()

{
  //lesen ob eine Taste gedrückt wurde
  char key = customKeypad.getKey(); //Wenn eine Taste gedrückt wurde,dann den Wert auswerten.
  if (key) { 
    switch (key){
      case '1': myDFPlayer.advertise(1); break;
      case '2': myDFPlayer.advertise(2); break;
      case '3': myDFPlayer.advertise(3); break;
      case '4': myDFPlayer.advertise(4); break;
      case '5': myDFPlayer.advertise(5); break;
      case '6': myDFPlayer.advertise(6); break;
      case '7': myDFPlayer.advertise(7); break;
      case '8': myDFPlayer.advertise(8); break; 
      case '9': myDFPlayer.advertise(9); break; 
      case '0': myDFPlayer.advertise(10); break;
      case '*': myDFPlayer.advertise(11); break;
      case '#': myDFPlayer.advertise(12); break;
 
        Serial.println("!!! Keine Funktion hinterlegt !!!");
      break;
    }
    Serial.print("Die Taste ");
    Serial.print(key);
    Serial.println(" wurde gedrueckt");
  }



  lcd.setCursor(0,0);
  lcd.print("W\xE1hle Rosis Nr.");

  customKey = customKeypad.getKey();


  if (customKey) // makes sure a key is actually pressed, equal to (customKey != NO_KEY)
  {
    Data[data_count] = customKey; // store char into data array
    lcd.setCursor(data_count,1); // move cursor to show each new char
    lcd.print(Data[data_count]); // print char at said cursor
    data_count++; // increment data array by 1 to store new char, also keep track of the number of chars entered
  }

  if(data_count == Password_Lenght-1) // if the array index is equal to the number of expected chars, compare data to master
  {
    lcd.clear();
    lcd.setCursor(0, 0);
   

    if(!strcmp(Data, Master)) // equal to (strcmp(Data, Master) == 0)
      { 
        myDFPlayer.play(002);
        delay(20);
        myDFPlayer.volume(30);
        delay(2000);
        lcd.print("Verbinde.");
        delay(1000);
        lcd.clear();
        lcd.print("Verbinde..");
        delay(1000);
        lcd.clear();
        lcd.print("Verbinde...");
        delay(1000);
        lcd.clear();
        lcd.print("Verbinde.");
        delay(1000);
        lcd.clear();
        lcd.print("Verbinde..");
        delay(1000);
        lcd.clear();
        lcd.print("Verbinde...");
        delay(1000);
        lcd.clear();
        lcd.print("Verbunden");
        digitalWrite(9, HIGH);
        delay(1000);
        myDFPlayer.pause();
        digitalWrite(9, LOW);
        delay(999999999999999999999999999999999999);
      }
      else
      {
        lcd.print("Verwaehlt");
        delay(2000);// added 1 second delay to make sure the password is completely shown on screen before it gets cleared.
        lcd.clear();
        clearData();
        
        
      } 
}

}
void clearData()
{
  while(data_count !=0)
  {   // This can be used for any array size, 
    Data[data_count--] = 0; //clear array for new data
  }
  return;
}

Füge ich den Code

  customKey = customKeypad.getKey();

hinzu Funktioniert nur der der Teil mit dem Zahlenschloss, ohne ihn funktioniert nur der teil mit dem Tastentönen.

Entschuldigt bitte das teilen des Postes, aber die Zeichen waren nur begrenzt und zwichen den Post und der Antwort müssen mindestens 5minuten vergehen.
Ich hoffe das einer von euch mir Anfänger auf die sprünge helfen kann.

LG Micha

Im Anhang befindet sich noch ein Bild vom Aufbau der Schaltung falls das noch jemand benötigt.

Liebe Grüße
Micha

Hallo Micha,
oh ha. Das ist aber nicht schön.

Für manchen mag das nur nutzloses Beiwerk sein: Kommentare und Code passen nicht zusammen.

#define Password_Lenght 6 // Give enough room for six chars + NULL char
char Data[Password_Lenght]; // 6 is the number of chars it can hold + the null char = 7

Und wo bitte soll die abschließende ‘\0’ gespeichert werden?

     case '#': myDFPlayer.advertise(12); break;
    // HIER FEHLT DOCH WAS!
        Serial.println("!!! Keine Funktion hinterlegt !!!");
      break;

Ich werde alt. Früher haben wir da noch ein default: eingefügt.

Versuch doch mal statt

  customKey = customKeypad.getKey();

die schon eingelesene Taste (und mit “Piep” versehene) Taste weiter zu verwenden:

  customKey = key;

Was ist denn das hier?

        delay(999999999999999999999999999999999999);

Meinst Du vielleicht

while (true) 
  ;

Die Wartezeit organisieren geht auch einfacher als das sechs Mal untereinander zu schreiben:

for (byte count = 0; count < 6; count++) {
        lcd.print("Verbinde.");
        delay(1000);
        lcd.clear();

}

Hier kannst Du ein ‘ä’:

  lcd.print("W\xE1hle Rosis Nr.");

Hier nicht- Warum?

        lcd.print("Verwaehlt");

Ich habe fertig - Du hast jetzt etwas zu tun.

Bitte gib Dir mehr Mühe, ordentlichen Code zu schreiben und zu verstehen, was er tut.
Zusammenkopieren != Software entwickeln.

Gruß Walter

Hallo Walter,

Vielen Dank für deine Hilfe.
Dein Hinweis mit

customKey = key;

war tatsächlich schon die lösung für mein Problem.
Nun werd ich mich noch ans Aufräumen des Codes machen, aber bis jetzt war ich froh dass das Zusammenkopierte überhaupt erstmal tut was es soll.

Liebe Grüße
Micha

Ein kleines Problem hätte ich aber dann doch noch.
Wenn das Passwort mit der 5. Ziffer richtig eingeben wurde wird leider kein Tastenton abgespielt,
aber im Serial Monitor wird es gesendet.

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek hochladen
LiquidCrystal_I2C lcd(0x27, 16, 2);  //Hier wird das Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen). In unserem Fall „lcd“. Die Adresse des I²C Displays kann je nach Modul variieren.
#define Password_Lenght 6 // Give enough room for six chars + NULL char


char Data[Password_Lenght]; // 5 is the number of chars it can hold + the null char = 6
char Master[Password_Lenght] = "32168"; // Passwort
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;

//Hier wird die größe des Keypads definiert
const byte COLS = 3; //3 Spalten
const byte ROWS = 4; //4 Zeilen
char keys[ROWS][COLS] = {
  {'#', '0', '*'},
  {'9', '8', '7'},
  {'6', '5', '4'},
  {'3', '2', '1'}
};

byte colPins[COLS] = {2, 3, 4,}; //Definition der Pins für die 3 Spalten
byte rowPins[ROWS] = {5, 6, 7, 8}; //Definition der Pins für die 4 Zeilen

Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  lcd.init(); //Im Setup wird der LCD gestartet
  lcd.backlight(); //Hintergrundbeleuchtung einschalten (0 schaltet die Beleuchtung aus).
  pinMode(9, OUTPUT); // Pin 9 ist ein Ausgang.
  digitalWrite(9, LOW);

  mySoftwareSerial.begin(9600);
  Serial.begin(115200);

  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while (true) {
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(20);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}


void loop() {
  //lesen ob eine Taste gedrückt wurde
  char key = customKeypad.getKey();
  //Wenn eine Taste gedrückt wurde,
  //dann den Wert auswerten.
  if (key) {
    switch (key) {
      case '1': myDFPlayer.advertise(1); break;
      case '2': myDFPlayer.advertise(2); break;
      case '3': myDFPlayer.advertise(3); break;
      case '4': myDFPlayer.advertise(4); break;
      case '5': myDFPlayer.advertise(5); break;
      case '6': myDFPlayer.advertise(6); break;
      case '7': myDFPlayer.advertise(7); break;
      case '8': myDFPlayer.advertise(8); break;
      case '9': myDFPlayer.advertise(9); break;
      case '0': myDFPlayer.advertise(10); break;
      case '*': myDFPlayer.advertise(11); break;
      case '#': myDFPlayer.advertise(12); break;

        Serial.println("!!! Keine Funktion hinterlegt !!!");
        break;
    }
    Serial.print("Die Taste ");
    Serial.print(key);
    Serial.println(" wurde gedrueckt");
  }


  lcd.setCursor(0, 0);
  lcd.print("W\xE1hle Rosis Nr.");

  customKey = key;


  if (customKey) // makes sure a key is actually pressed, equal to (customKey != NO_KEY)
  {
    Data[data_count] = customKey; // store char into data array
    lcd.setCursor(data_count, 1); // move cursor to show each new char
    lcd.print(Data[data_count]); // print char at said cursor
    data_count++; // increment data array by 1 to store new char, also keep track of the number of chars entered
  }

  if (data_count == Password_Lenght - 1) // if the array index is equal to the number of expected chars, compare data to master
  {
    lcd.clear();
    lcd.setCursor(0, 0);








    if (!strcmp(Data, Master)) // equal to (strcmp(Data, Master) == 0)
    {
      myDFPlayer.play(2);
      delay(20);
      myDFPlayer.volume(30);
      delay(2000);
      lcd.print("Verbinde.");
      delay(1100);
      lcd.clear();
      lcd.print("Verbinde..");
      delay(1100);
      lcd.clear();
      lcd.print("Verbinde...");
      delay(1100);
      lcd.clear();
      lcd.print("Verbinde.");
      delay(1100);
      lcd.clear();
      lcd.print("Verbinde..");
      delay(1100);
      lcd.clear();
      lcd.print("Verbinde...");
      delay(1100);
      lcd.clear();
      lcd.print("Verbunden");
      myDFPlayer.pause();
      digitalWrite(9, HIGH);
      delay(1000);
      digitalWrite(9, LOW);
      while (true)
        ;
    }



    else
    {
      lcd.print("Verw\xE1hlt");
      delay(2000);// added 2 second delay to make sure the password is completely shown on screen before it gets cleared.
      lcd.clear();
      clearData();


    }


  }

}
void clearData()
{
  while (data_count != 0)
  { // This can be used for any array size,
    Data[data_count--] = 0; //clear array for new data
  }
  return;
}

Liebe Grüße
Micha

Nun, ich habe zwar eine Vermutung, aber nicht die passende Hardware um die zu verifizieren.

Du hast ja schon einige Kontrollausgaben auf die serielle Schnittstelle im Code eingebaut. In Fällen, wo das Starren auf den Code versagt, hilft es, an allen wichtigen Stellen, an denen etwas passiert (oder passieren soll) eine Ausgabe vorzusehen. Damit kannst Du nachverfolgen, wo genau das Programm in diesem Fall langläuft.
Wenn Du dann im Monitor noch die Zeitstempel einschaltest siehst Du auch, wie lang es jeweils an dieser oder jener Stelle verweilt.

Gruß Walter

Nach längerer Zeit hab ich das Projekt endlich mal wieder raus gekramt. Leider musste ich Platz bedingt von einem Zweizeiligen Display auf ein Einzeiliges wechsel. Dieses möchte allerding wie ein Zweizeiliges angesteuert werden, sprich die linke hälfte als Zeile 1 und die rechte hälfte als Zeile 2.

Der eingebene Zahlencode wurde immer auf Zeile zwei ausgegeben, die muss nun in der ersten Zeile passieren und dazu muss ich den Text:

  lcd.setCursor(0, 0);
  lcd.print("W\xE1hle Ro");
  lcd.setCursor(0, 1);
  lcd.print("sis Nr.");

vorher löschen.

Kann mir einer verraten an welche stelle ich hier das

lcd.clear();

setzen muss das der Text nicht sofort wieder eingetragen wir.

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek hochladen
LiquidCrystal_I2C lcd(0x27, 16, 2);  //Hier wird das Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen). In unserem Fall „lcd“. Die Adresse des I²C Displays kann je nach Modul variieren.
#define Password_Lenght 6 // Give enough room for six chars + NULL char


char Data[Password_Lenght]; // 5 is the number of chars it can hold + the null char = 6
char Master[Password_Lenght] = "32168"; // Passwort
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;

//Hier wird die größe des Keypads definiert
const byte COLS = 3; //3 Spalten
const byte ROWS = 4; //4 Zeilen
char keys[ROWS][COLS] = {
  {'#', '0', '*'},
  {'9', '8', '7'},
  {'6', '5', '4'},
  {'3', '2', '1'}
};

byte colPins[COLS] = {2, 3, 4,}; //Definition der Pins für die 3 Spalten
byte rowPins[ROWS] = {5, 6, 7, 8}; //Definition der Pins für die 4 Zeilen

Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  lcd.init(); //Im Setup wird der LCD gestartet
  lcd.backlight(); //Hintergrundbeleuchtung einschalten (0 schaltet die Beleuchtung aus).
  pinMode(9, OUTPUT); // Pin 9 ist ein Ausgang.
  digitalWrite(9, LOW);

  mySoftwareSerial.begin(9600);
  Serial.begin(115200);

  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while (true) {
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(10);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}


void loop() {
  //lesen ob eine Taste gedrückt wurde
  char key = customKeypad.getKey();
  //Wenn eine Taste gedrückt wurde,
  //dann den Wert auswerten.
  if (key) {
    switch (key) {
      case '1': myDFPlayer.advertise(1); break;
      case '2': myDFPlayer.advertise(2); break;
      case '3': myDFPlayer.advertise(3); break;
      case '4': myDFPlayer.advertise(4); break;
      case '5': myDFPlayer.advertise(5); break;
      case '6': myDFPlayer.advertise(6); break;
      case '7': myDFPlayer.advertise(7); break;
      case '8': myDFPlayer.advertise(8); break;
      case '9': myDFPlayer.advertise(9); break;
      case '0': myDFPlayer.advertise(10); break;
      case '*': myDFPlayer.advertise(11); break;
      case '#': myDFPlayer.advertise(12); break;

        Serial.println("!!! Keine Funktion hinterlegt !!!");
        break;
    }
    Serial.print("Die Taste ");
    Serial.print(key);
    Serial.println(" wurde gedrueckt");
  }


  lcd.setCursor(0, 0);
  lcd.print("W\xE1hle Ro");
  lcd.setCursor(0, 1);
  lcd.print("sis Nr.");

  customKey = key;

  if (customKey) // makes sure a key is actually pressed, equal to (customKey != NO_KEY)
  {
    Data[data_count] = customKey; // store char into data array
    lcd.setCursor(data_count, 0); // move cursor to show each new char
    lcd.print(Data[data_count]); // print char at said cursor
    data_count++; // increment data array by 1 to store new char, also keep track of the number of chars entered
  }

  if (data_count == Password_Lenght - 1) // if the array index is equal to the number of expected chars, compare data to master
  {
    lcd.clear();
    lcd.setCursor(0, 0);


    if (!strcmp(Data, Master)) // equal to (strcmp(Data, Master) == 0)
    {
      myDFPlayer.play(2);
      delay(20);
      myDFPlayer.volume(30);
      delay(2000);

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print(".");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("..");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("...");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print(".");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("..");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("...");

      delay(1100);
      lcd.clear();

      lcd.print("Verbunden");
      lcd.setCursor(0, 0);
      lcd.print("Verbunde");
      lcd.setCursor(0, 1);
      lcd.print("n");

      myDFPlayer.pause();
      digitalWrite(9, HIGH);
      delay(500);
      digitalWrite(9, LOW);
      while (true)
        ;


    }



    else
    {
      lcd.print("Verw\xE1hlt");
      delay(2000);// added 2 second delay to make sure the password is completely shown on screen before it gets cleared.
      lcd.clear();
      clearData();


    }


  }

}
void clearData()
{
  while (data_count != 0)
  { // This can be used for any array size,
    Data[data_count--] = 0; //clear array for new data
  }
  return;
}

Hallo
Zeig mal den Link zum LCD-Modul

pharmadoc:
von einem Zweizeiligen Display auf ein Einzeiliges wechsel. Dieses möchte allerding wie ein Zweizeiliges angesteuert werden, sprich die linke hälfte als Zeile 1 und die rechte hälfte als Zeile 2.

dazu muss ich den Text:

  lcd.setCursor(0, 0);

lcd.print(“W\xE1hle Ro”);
  lcd.setCursor(0, 1);
  lcd.print(“sis Nr.”);



vorher löschen.

Kann mir einer verraten an welche stelle ich hier das 


lcd.clear();



setzen muss das der Text nicht sofort wieder eingetragen wir.

Vielleicht versteh ich ja Deine Frage nicht, aber Du musst nicht ein lcd(clear) irgendwo einsetzen, sondern die lcd.print an die richtige Stelle bringen, damit die eben nicht andauernd die Zeile überschreiben.
Sonst bleibt Dir zum Schluß nur nen leerer Display.

Hallo,
also nochmal hoffentlich etwas verständlicher. Wenn ich den linken teil des Display Auskommentiere

// lcd.setCursor(0, 0);
//lcd.print("W\xE1hle Ro");

wird auf der linken seite der eingebene Zahlencode angezeigt.
Also wird der Zahlencode einfach in jedem Duchgang von dem ersten Teil einfach wieder überschrieben.

Daher hätte ich gern das der angezeigte Text einfach beim ersten Tastendruck bevor der eigentliche Zahlencode an das Display geschickt wird vorher gelöscht wird.

Bei dem Display handelt es sich um folgendes:

Liebe Grüße
Micha

warum machst nicht ein lcd.clear vor dem ersten print?

setcursor(0,0) löscht nicht
clear löscht

eigentlich doch logisch oder?

Hier ist was faul!
Schau Dir die Referenz zu switch/case an! (In der Hilfe der IDE)
Und bitte formatiere Deinen Code vor dem einstellen mit STRG-T und entferne unnötige Leerzeilen.

pharmadoc:

      case '#': myDFPlayer.advertise(12); break;

Serial.println("!!! Keine Funktion hinterlegt !!!");
        break;

noiasca:
warum machst nicht ein lcd.clear vor dem ersten print?

setcursor(0,0) löscht nicht
clear löscht

eigentlich doch logisch oder?

Grüße noiasca,

wenn ich das mache fängt der Text an zu flimmer da er ja bei jeden durchlauf der Schleife geschrieben und gelöscht wird.
Ich möchte ja aber das der Text so lange steht bis die erste Taste gedrückt wurde und dann platz für die eigegebenen Zahlen macht.

my_xy_projekt:
Hier ist was faul!
Schau Dir die Referenz zu switch/case an! (In der Hilfe der IDE)
Und bitte formatiere Deinen Code vor dem einstellen mit STRG-T und entferne unnötige Leerzeilen.

pharmadoc:

      case '#': myDFPlayer.advertise(12); break;

Serial.println("!!! Keine Funktion hinterlegt !!!");
       break;

Hallo my_xy_projekt,
leider versteh ich auch nach dem durchlesen nicht was da faul sein soll. Dafür hab ich einfach noch zu wenig durchblick von der Materie. Aber ansich hat das ganze ja schon so funktoniert wie es sollte. MeinProblem ist ja erst durch das verwenden eines Einzeiligen Displays aufgetretet.
Danke schonmal für eure Hilfe.
LG
Micha

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek hochladen
LiquidCrystal_I2C lcd(0x27, 16, 2);  //Hier wird das Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen). In unserem Fall „lcd“. Die Adresse des I²C Displays kann je nach Modul variieren.
#define Password_Lenght 6 // Give enough room for six chars + NULL char

char Data[Password_Lenght]; // 5 is the number of chars it can hold + the null char = 6
char Master[Password_Lenght] = "32168"; // Passwort
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;

//Hier wird die größe des Keypads definiert
const byte COLS = 3; //3 Spalten
const byte ROWS = 4; //4 Zeilen
char keys[ROWS][COLS] = {
  {'#', '0', '*'},
  {'9', '8', '7'},
  {'6', '5', '4'},
  {'3', '2', '1'}
};

byte colPins[COLS] = {2, 3, 4,}; //Definition der Pins für die 3 Spalten
byte rowPins[ROWS] = {5, 6, 7, 8}; //Definition der Pins für die 4 Zeilen

Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  lcd.init(); //Im Setup wird der LCD gestartet
  lcd.backlight(); //Hintergrundbeleuchtung einschalten (0 schaltet die Beleuchtung aus).
  pinMode(9, OUTPUT); // Pin 9 ist ein Ausgang.
  digitalWrite(9, LOW);

  mySoftwareSerial.begin(9600);
  Serial.begin(115200);

  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while (true) {
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(10);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}

void loop() {
  //lesen ob eine Taste gedrückt wurde
  char key = customKeypad.getKey();
  //Wenn eine Taste gedrückt wurde,
  //dann den Wert auswerten.
  if (key) {
    switch (key) {
      case '1': myDFPlayer.advertise(1); break;
      case '2': myDFPlayer.advertise(2); break;
      case '3': myDFPlayer.advertise(3); break;
      case '4': myDFPlayer.advertise(4); break;
      case '5': myDFPlayer.advertise(5); break;
      case '6': myDFPlayer.advertise(6); break;
      case '7': myDFPlayer.advertise(7); break;
      case '8': myDFPlayer.advertise(8); break;
      case '9': myDFPlayer.advertise(9); break;
      case '0': myDFPlayer.advertise(10); break;
      case '*': myDFPlayer.advertise(11); break;
      case '#': myDFPlayer.advertise(12); break;

        Serial.println("!!! Keine Funktion hinterlegt !!!");
        break;
    }
    Serial.print("Die Taste ");
    Serial.print(key);
    Serial.println(" wurde gedrueckt");
  }

  lcd.setCursor(0, 0);
  lcd.print("W\xE1hle Ro");
  lcd.setCursor(0, 1);
  lcd.print("sis Nr.");

  customKey = key;

  if (customKey) // makes sure a key is actually pressed, equal to (customKey != NO_KEY)
  {
    Data[data_count] = customKey; // store char into data array
    lcd.setCursor(data_count, 0); // move cursor to show each new char
    lcd.print(Data[data_count]); // print char at said cursor
    data_count++; // increment data array by 1 to store new char, also keep track of the number of chars entered
  }

  if (data_count == Password_Lenght - 1) // if the array index is equal to the number of expected chars, compare data to master
  {
    lcd.clear();
    lcd.setCursor(0, 0);

    if (!strcmp(Data, Master)) // equal to (strcmp(Data, Master) == 0)
    {
      myDFPlayer.play(2);
      delay(20);
      myDFPlayer.volume(30);
      delay(2000);

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print(".");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("..");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("...");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print(".");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("..");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("...");

      delay(1100);
      lcd.clear();

      lcd.print("Verbunden");
      lcd.setCursor(0, 0);
      lcd.print("Verbunde");
      lcd.setCursor(0, 1);
      lcd.print("n");

      myDFPlayer.pause();
      digitalWrite(9, HIGH);
      delay(500);
      digitalWrite(9, LOW);
      while (true)
        ;
    }

    else
    {
      lcd.print("Verw\xE1hlt");
      delay(2000);// added 2 second delay to make sure the password is completely shown on screen before it gets cleared.
      lcd.clear();
      clearData();
    }
  }
}
void clearData()
{
  while (data_count != 0)
  { // This can be used for any array size,
    Data[data_count--] = 0; //clear array for new data
  }
  return;
}

Da fehlt m.E. ein default:

     case '#':
       myDFPlayer.advertise(12); 
       break;
     default:
       Serial.println("!!! Keine Funktion hinterlegt !!!");
       break;
    }

Also ich konnte mein Problem mittlerweile selbst lösen:

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek hochladen
LiquidCrystal_I2C lcd(0x27, 16, 2);  //Hier wird das Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen). In unserem Fall „lcd". Die Adresse des I²C Displays kann je nach Modul variieren.
#define Password_Lenght 6 // Give enough room for six chars + NULL char

char Data[Password_Lenght]; // 5 is the number of chars it can hold + the null char = 6
char Master[Password_Lenght] = "32168"; // Passwort
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;

//Hier wird die größe des Keypads definiert
const byte COLS = 3; //3 Spalten
const byte ROWS = 4; //4 Zeilen
char keys[ROWS][COLS] = {
  {'#', '0', '*'},
  {'9', '8', '7'},
  {'6', '5', '4'},
  {'3', '2', '1'}
};

byte colPins[COLS] = {2, 3, 4,}; //Definition der Pins für die 3 Spalten
byte rowPins[ROWS] = {5, 6, 7, 8}; //Definition der Pins für die 4 Zeilen

Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  lcd.init(); //Im Setup wird der LCD gestartet
  lcd.backlight(); //Hintergrundbeleuchtung einschalten (0 schaltet die Beleuchtung aus).
  pinMode(9, OUTPUT); // Pin 9 ist ein Ausgang.
  digitalWrite(9, LOW);

  mySoftwareSerial.begin(9600);
  Serial.begin(115200);

  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

  lcd.setCursor(0, 0);
  lcd.print("W\xE1hle Ro");
  lcd.setCursor(0, 1);
  lcd.print("sis Nr.");

  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while (true) {
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(20);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}

void loop() {
  //lesen ob eine Taste gedrückt wurde
  char key = customKeypad.getKey();
  //Wenn eine Taste gedrückt wurde,
  //dann den Wert auswerten.

  if ((data_count == 0) && (key))
  {
    lcd.clear();
  }

  if (key) {

    switch (key) {
      case '1': myDFPlayer.advertise(1); break;
      case '2': myDFPlayer.advertise(2); break;
      case '3': myDFPlayer.advertise(3);; break;
      case '4': myDFPlayer.advertise(4); break;
      case '5': myDFPlayer.advertise(5); break;
      case '6': myDFPlayer.advertise(6); break;
      case '7': myDFPlayer.advertise(7); break;
      case '8': myDFPlayer.advertise(8); break;
      case '9': myDFPlayer.advertise(9); break;
      case '0': myDFPlayer.advertise(10); break;
      case '*': myDFPlayer.advertise(11); break;
      case '#': myDFPlayer.advertise(12); break;

      default:
        Serial.println("!!! Keine Funktion hinterlegt !!!"); break;
    }
    Serial.print("Die Taste ");
    Serial.print(key);
    Serial.println(" wurde gedrueckt");
  }

  customKey = key;

  if (customKey) // makes sure a key is actually pressed, equal to (customKey != NO_KEY)
  {
    Data[data_count] = customKey; // store char into data array
    lcd.setCursor(data_count, 0); // move cursor to show each new char
    lcd.print(Data[data_count]); // print char at said cursor
    data_count++; // increment data array by 1 to store new char, also keep track of the number of chars entered
  }

  if (data_count == Password_Lenght - 1) // if the array index is equal to the number of expected chars, compare data to master
  {
    lcd.clear();
    lcd.setCursor(0, 0);

    if (!strcmp(Data, Master)) // equal to (strcmp(Data, Master) == 0)
    {
      delay(1000);
      myDFPlayer.play(2);
      delay(20);
      myDFPlayer.volume(30);
      delay(2000);

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print(".");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("..");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("...");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print(".");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("..");

      delay(1100);
      lcd.clear();

      lcd.setCursor(0, 0);
      lcd.print("Verbinde");
      lcd.setCursor(0, 1);
      lcd.print("...");

      delay(1100);
      lcd.clear();

      lcd.print("Verbunden");
      lcd.setCursor(0, 0);
      lcd.print("Verbunde");
      lcd.setCursor(0, 1);
      lcd.print("n");

      myDFPlayer.pause();
      digitalWrite(9, HIGH);
      delay(500);
      digitalWrite(9, LOW);
      while (true)
        ;
    }

    else
    {
      lcd.print("Verw\xE1hlt");
      delay(2000);// added 2 second delay to make sure the password is completely shown on screen before it gets cleared.
      lcd.setCursor(0, 0);
      lcd.print("W\xE1hle Ro");
      lcd.setCursor(0, 1);
      lcd.print("sis Nr.");
      clearData();
    }
  }
}
void clearData()
{
  while (data_count != 0)
  { // This can be used for any array size,
    Data[data_count--] = 0; //clear array for new data
  }
  return;
}

Eine kleinigkeit stört mich allerdings noch, wenn ich den Code eingeben hab wird die 5. Stelle nicht angezeigt bevor das Programm weiter läuft.

Liebe Grüße
Micha

vermutlich läuft dein Programm nach der 5ten stelle sofort hier hinein und löscht daher das Display bevor du deine Eingabe sehen kannst:

if (data_count == Password_Lenght - 1) // if the array index is equal to the number of expected chars, compare data to master
  {
    lcd.clear();
    lcd.setCursor(0, 0);

Außerdem weil ich es gerade sehe:

#define Password_Lenght 6 // Give enough room for six chars + NULL char

nö, bei 6 hast 5 chars + Null.
Schreibe einfach keine Zahlen in deine Kommentare.

Selbst ein

#define Password_Lenght 5+1

ist aus meiner Sicht sprechender als ein irreführender Kommentar. Abgesehen davon, dass man für Konstanten schon lange keine defines mehr braucht. Ein

const byte passwordLength = 5+1; // (!!!)

erfüllt seinen Zweck, ist Typ-Sicher, wird wegoptimiert, beginnt mit einem Kleinbuchstaben und
und finally: Länge ist richtig geschrieben.

bei
height vs. width

passiert mir das auch oft :wink:

noiasca:
Außerdem weil ich es gerade sehe:

#define Password_Lenght 6 // Give enough room for six chars + NULL char

nö, bei 6 hast 5 chars + Null.

Ein

const byte passwordLength = 5+1; // (!!!)

erfüllt seinen Zweck, ist Typ-Sicher, wird wegoptimiert, beginnt mit einem Kleinbuchstaben und
und finally: Länge ist richtig geschrieben.

Er konnte sich wohl auch nicht entscheiden :wink:

#define Password_Lenght 6 // Give enough room for six chars + NULL char

char Data[Password_Lenght]; // 5 is the number of chars it can hold + the null char = 6
char Master[Password_Lenght] = "32168"; // Passwort

Ich hätt ja noch anders, alles mit sizeof gelöst, und den passwordLength vorher nur als Mindestlänge festgelegt....

Aber wer erst schreibt, er konnte sein Problem selbst lösen mit dem Hinweis von 2 Postern und dann im Nachsatz ein "aber geht doch nicht", versüsst mir heute den Ausklang des Tages.:wink:

noiasca:
Schreibe einfach keine Zahlen in deine Kommentare.

Diese Regel sollte man verallgemeinern. :slight_smile:

Hab auch schonmal sowas gelesen wie

?:
Kommentare sollten beschreiben warum man etwas macht, nicht was man macht.