Hilfe für Projekt Passwortabfrage gesucht

Hallo Zusammen,
ich bin noch ein ziemlicher Neuling in der Welt der Arduinos und benötige eure hilfe für folgendes Projekt:

Ich möchte gerne einen Servo-Motor eines Türschlosses ansteuern. Diese Tür soll nur öffnen, wenn über ein Eingabefeld einer der richtigen Codes eingegeben wird. Zusätzlich dazu sollen die bereits genutzten Codes ungültig werden.

hier folgende Logik für die Passwortabfrage:

void setup() {
 Serial.begin(9600);
int Passwords[5] = {110,111,112,113,114};  //beispiele für passwörter
}

void loop() {

int Eingabe=115;

if (Eingabe==Passwords[5]){                 //funktioniert so nicht

 Serial.print("richtiges Passwort");

 }
else{
 Serial.print("falsches Passwort");
}
}

Ich wollte hiermit erreichen, das Array abzufragen, ob die Eingabe-Zahl ein Element davon ist. Leider funktioniert das so nicht.

Weiß von euch jemand, wie man diese Abfrage programmieren kann?

Zusätzlich würde ich gerne,falls ein Code im Array enthalten ist, diesen mit einem char Format überschreiben um ihn damit ungülig und unnützlich zu machen. Aber das ist ein weteres gaaannzzz anderes Problem.

Wäre echt cool, wenn mir einer von euch weiterhelfen könnte.

Grüße, stefan

Kann auch nicht funktionieren. Der Index in

int Passwords[5]

läuft von 0 bis 4.

Bitte setze Deinen Sketch in Codetags. (</>-Button oben links im Forumseditor)

Gruß Tommy

Hi

Du kannst in dem Array rein schreiben, was Du willst - da Du das Array als int deklarierst, werden eingetragene char ggf. eine Warnung/einen Error hervorrufen - beim Auslesen wird der Typ aber wieder int sein.

Benutzt Du negative Zahlen? Warum dann int und nicht unsigned int? Wie groß sollen die Zahlen werden? int, egal ob Vorzeichen oder nicht, ist auf dem Arduino 16Bit und weeeit entfernt von Deinen Beispielzahlen - hier würde char (-128...127) oder byte (0...255), zumindest bis jetzt, reichen. Kann Das gerade nicht testen (kein USB frei :o), sollte aber die Zahlen 1...7 ausgeben, kompiliert zumindest. X wird nach einander zu arrayname[0]....arrayname6

byte arrayname[]={1,2,3,4,5,6,7};

for (auto x:arrayname){
  Serial.print(x);
}

MfG

Weil ich gerade selber nicht wuste wie das mit dem Array ging. Habe ich das mal eben zusammen gestrikt.

// https://www.arduino.cc/en/Reference/ASCIIchart

// Ein Password besteht aus mereren Zeichen, hir wird nur 1 Zeichen gesucht und erkannt. Es können auch 
// zeichenketten eingegeben werden. Der Serielle Monitor dient als ein und ausgabe.

byte Passzeichen[5] = {97, 98, 99, 100, 101}; //beispiele für passzeichen, Passzeichen[0] ist das erste Zeichen
byte Eingabe = 0 ;
byte gefunden = 0 ;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:

  Eingabe = 0 ;
  if (Serial.available() > 0) { // hier wird geschaut ob ein Zeichen im Pufferliegt. Also ob im Serial Monitor ein 
    Eingabe = Serial.read() ;   // Zeichen eingebene wurde und dann mit Return losgeschickt wurde.
    gefunden = 0 ;              // gibt es merer Zeichen, so wird die Abfrage nochmal durchgefürt.
  }

  if (Eingabe > 31) {   // keine Steuerzeichen auswerten
    for (int i = 0; i < 5; i++) { // Prüfe Zeichen 0 - 4 
      if (Eingabe == Passzeichen[i]) {  
        gefunden = 1 ;
      }
    }
    if ( gefunden == 1){
      Serial.println(F("Zeichen gefunden"));
    }
    else{
      Serial.println(F("Zeichen nicht gefunden"));
    }
  }
}

Für eine echte Password abfrage noch nicht tauglich … soll es auch nicht, denn das schaft du auch alleine.

C hat keine Funktion die ein ganzes Array vergleicht. Du mußt jedes einzelne Element vergleichen. if (Eingabe==Passwords[5]){ vergleicht die Eingabe mit dem 6. Element des 5 elementigen Array. Praktisch mit dem Wert der zufällig nach dem Array in RAM steht.

Grüße Uwe

Die automatische Übersetzung ist nicht wirklich erhellend.

Gruß Tommy

uwefed: C hat keine Funktion die ein ganzes Array vergleicht.

Was? memcmp() kennst du nicht?