[Danke gelöst] Problem mit Vergleich von DateTime und InputArray

Hallo zusammen,

ich hoffe ihr könnt mir helfen, so dass ich es verstehe.
Ich habe einen Passwort sketch, der soweit wunderbar
funktioniert.
Nun wollte ich die letzten beiden Eingaben vom Passwort
in Abhängigkeit der Zeit stellen, aber bekomme ein ok,
auch wenn es nicht passt.
Habe heute Nacht schon vieles probiert, aber immer
wieder stoße ich auf fehler.
Was mache ich nur falsch?

Grüße
Stefan

//keypad with password

#include <Wire.h>
#include "RTClib.h"
#include <Keypad.h>

const byte myRows = 4;  // number of rows
const byte myCols = 3;  //number of columns

char keys[myRows][myCols] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
}; //character array to map the button layout of the keypad

byte rowPins[myRows] = {5, 4, 3, 2 }; //array to map keypad to MCU pins
byte colPins[myCols] = {8, 7, 6 }; //array to map keypad to MCU pins

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, myRows, myCols ); //keypad library map function

char inputArray[4]={'0','0','0','0'};
char Main[4] = {'3','3','3','3'}; 
char Guest[4] = {'2','2','2','2'};
char Lock[4] = {'1','1','4','8'};


#define ledPin 13 

int i = 0;


#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!
   #define Serial SerialUSB
#endif

RTC_DS1307 rtc;

void setup()
{
Serial.begin(9600); 
pinMode(ledPin, OUTPUT); 

if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2016, 1, 10, 13, 15, 0));
  }

}

void loop()
{DateTime now = rtc.now();

int Minute = 0;
int Stunde = ' ';
Minute = now.minute();
Stunde = now.hour();
char dt[3];
sprintf(dt, "%02d",now.hour());

{
   
 char key = kpd.getKey();

 
   if(key)
     {
     digitalWrite(ledPin, HIGH);
     delay(100);
     digitalWrite(ledPin, LOW);
     delay(100);
     inputArray[i] = key; 
     i++;
     Serial.println(key); 

     if (key=='*')
       {
         Serial.println("Reset");
         i=0; //reset i
       }

     if (i == 4) 
       {
         {
           if (inputArray[0] == Main[1] &&
           inputArray[1] == Main[1] &&
           inputArray[2] == Main[2] &&
           inputArray[3] == Main[3])
              {
               digitalWrite(ledPin, HIGH); 
               Serial.println("Status Main");
               delay(1000);
               digitalWrite(ledPin, LOW);
              }
         }
         
         {
           if (inputArray[0] == Guest[0] &&
           inputArray[1] == Guest[1] &&
           inputArray[2] == Guest[2] &&
           inputArray[3] == Guest[3])
              {
               Serial.println("Status Guest");               
              }
         }
         
         {
          if (inputArray[0] == Lock[0] &&
           inputArray[1] == Lock[1] &&
           inputArray[2] == Lock[2] &&
           inputArray[3] == Lock[3])
              {
               Serial.println("State lock   ");
               Serial.print("Array 2=");
               Serial.println(inputArray[2]);
               Serial.print("Array 3=");
               Serial.println(inputArray[3]);
               Serial.print("Minute");
               Serial.println (Minute);
               Serial.print("Stunde");
               Serial.println (Stunde);
               Serial.print("dt=");
               Serial.println(dt);
             //  if (dt == Lock[2],Lock[3])
              //{Serial.println("geschafft char");}
               if (Minute == Lock[2],Lock[3])
              {Serial.println("geschafft int");}
             

           //   }
         }
         
         {
         i=0; //reset i
         }
       }
     }
   };
}}

Das Ergebnis von gerade eben:

1
1
4
8
State lock
Array 2=4
Array 3=8
Minute0
Stunde14
dt=14
geschafft int <<<<< Warum?

Ich teste immer im letzten Bereich “Lock”

Danke

Verkehrt ist, dass du uns einen per "copy & paste" eingefügten Sketch hier anbietest, der obendrein noch schlecht bis garnicht dokumentiert ist.

Solche Sketche werden von mir und vielen anderen nicht bearbeitet,, da das einarbeiten schon sehr aufwändig ist.

Zudem wurde der Sketch falsch eingefügt, verwende bitte Code-Tags dafür. Du kannst es auch nachträglich machenn.

Das sollte man nie verwenden wenn man nicht genau weiß was es macht:

if (Minute == Lock[2],Lock[3])

Das führt den ersten Ausdruck aus aber gibt den zweiten zurück. Hat wenig Nutzen, aber wird z.B. bei for-Schleifen manchmal verwendet

Oben hast du korrekt && verwendet. Wieso machst du dann das wenn du es nicht verstehst?

Um zwei Arrays Byte-weise zu vergleichen gibt es auch memcmp()

Oben habe ich Zahl für Zahl verglichen.
Jetzt möchte ich ja Zwei Zahlen mit der
Zeit vergleichen.

Wenn du eine Zeit als zwei Ziffern als eine Zahl willst, dann musst du die erst mal berechnen. z.B.:

2 und 3 = 2 * 10 + 3 = 23
4 und 8 = 4 * 10 + 8 = 48

Grundlagen Dezimal-System. Jede Ziffer hat eine Wertigkeit: 1, 10, 100, 1000, etc.

Serenifly:
Wenn du eine Zeit als zwei Ziffern als eine Zahl willst, dann musst du die erst mal berechnen. z.B.:

2 und 3 = 2 * 10 + 3 = 23
4 und 8 = 4 * 10 + 8 = 48

Grundlagen Dezimal-System. Jede Ziffer hat eine Wertigkeit: 1, 10, 100, 1000, etc.

Ich glauble ich stehe gerade voll auf dem Schlauch,
kannst du mir deinen Kommentar bitte genauer erklären?
Ich studiere gerade memcmp.

Gebt mir bissl Zeit,
ich probiere dahinter zu kommen.

Bis nachher

Sowie ich das verstehe hast du z.B. '1', '1', '4', '8'. Und das soll 11 Stunden 48 Minuten sein.

Dann musst du nach obigem Muster erst mal aus den jeweils zwei Ziffern die Stunden und Minuten berechnen und erst danach vergleichen. 11 als int z.B. ist nicht einfach zweimal '1' hintereinander!

Serenifly:
Sowie ich das verstehe hast du z.B. '1', '1', '4', '8'. Und das soll 11 Stunden 48 Minuten sein.

Dann musst du nach obigem Muster erst mal aus den jeweils zwei Ziffern die Stunden und Minuten berechnen und erst danach vergleichen. 11 als int z.B. ist nicht einfach zweimal '1' hintereinander!

geschafft
recht herzlichen Dank
jetzt werden die Nächte wieder kürze

Der Code dazu.
Ich habs mit dem ascii Problem gelöst und deiner kleinen Formel

//keypad with password
#include <stdlib.h>
#include <Wire.h>
#include "RTClib.h"
#include <Keypad.h>

const byte myRows = 4;  // number of rows
const byte myCols = 3;  //number of columns

char keys[myRows][myCols] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
}; //character array to map the button layout of the keypad

byte rowPins[myRows] = {5, 4, 3, 2 }; //array to map keypad to MCU pins
byte colPins[myCols] = {8, 7, 6 }; //array to map keypad to MCU pins

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, myRows, myCols ); //keypad library map function

char inputArray[4]={'0','0','0','0'};
char Main[4] = {'3','3','3','3'}; 
char Guest[4] = {'2','2','2','2'};
char Lock[4] = {'0','1','0','0'};


#define ledPin 13 

int i = 0;


#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!
   #define Serial SerialUSB
#endif

RTC_DS1307 rtc;

void setup()
{
Serial.begin(9600); 
pinMode(ledPin, OUTPUT); 

if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2016, 1, 10, 13, 15, 0));
  }

}

void loop()
{DateTime now = rtc.now();
int n;
int m;
int l;
int Minute = 0;
int Stunde = 0;


Minute = now.minute();
Stunde = now.hour();
//char dt[3];
//sprintf(dt, "%02d",now.hour());

{
   
 char key = kpd.getKey();

 
   if(key)
     {
     digitalWrite(ledPin, HIGH);
     delay(100);
     digitalWrite(ledPin, LOW);
     delay(100);
     inputArray[i] = key; 
     i++;
     Serial.println(key); 

     if (key=='*')
       {
         Serial.println("Reset");
         i=0; //reset i
       }

     if (i == 4) 
       {
         {
           if (inputArray[0] == Main[1] &&
           inputArray[1] == Main[1] &&
           inputArray[2] == Main[2] &&
           inputArray[3] == Main[3])
              {
               digitalWrite(ledPin, HIGH); 
               Serial.println("Status Main");
               delay(1000);
               digitalWrite(ledPin, LOW);
              }
         }
         
         {
           if (inputArray[0] == Guest[0] &&
           inputArray[1] == Guest[1] &&
           inputArray[2] == Guest[2] &&
           inputArray[3] == Guest[3])
              {
               Serial.println("Status Guest");               
              }
         }
         
         {
          if (inputArray[0] == Lock[0] &&
           inputArray[1] == Lock[1])
          // inputArray[2] == Lock[2] &&
           //inputArray[3] == Lock[3])
              {
               Serial.println("Benutzer ok   ");
              
               
               n = (inputArray[2]-48);
               m = (inputArray[3]-48);
               l = n*10+m;
             
              if (Minute == l)
              {Serial.println("Minute ok");}
             

           //   }
         }
         
         {
         i=0; //reset i
         }
       }
     }
   };
}}