wachtwoordensysteem

Hallo,
Ik probeer al een tijdje een wachtwoordensysteem te maken, maar hier werkt iets niet helemaal.
Ik weet niet zo goed waar de fout in de code zit.

int led1 = 13, led2 = 12, buzzer = 11; //Pin Declaration
const char password;
void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(13, OUTPUT); //selecting output mode for pin 13
  pinMode(12, OUTPUT); //selecting output mode for pin 12
  pinMode(11, OUTPUT); //selecting output mode for pin 11
  Serial.begin(9600); //selecting baud rate
  char password[] = "1"; // calling function to save password

}



void loop()// compare the saved value of ssid and password with new entered values
{

if(Serial.available())

    {
      Serial.print("Enter Password for your verification: ");
      String a = Serial.readString();
      Serial.print('\n');
      Serial.print("Entered password for your verification: ");
      Serial.print(a);
      Serial.print('\n');
      if ( a == password  ) // loop to blink green led and buzzer if both id and password is correct
      {


        Serial.print("Password is Correct");
        digitalWrite(led1, HIGH);
        digitalWrite(led2, LOW);
        digitalWrite(buzzer, LOW);
        
      }
      else if (a != password) // loop to blink red led and buzzer if password is incorrect
      {

        digitalWrite(led2, HIGH);
        digitalWrite(led1, LOW);
        delay(1000);
        Serial.print('\n');
        Serial.println("Password is InCorrect");

      }
    }
  
}

Kan iemand me hiermee helpen?
Alvast bedankt!!!
Nanno.

// Dit is een enkel teken.
const char password;

// Dit heeft dezelfde naam en wordt niet gebruikt.
char password[] = "1";

// Vergelijken zou ik met twee String objecten doen
if ( a == password  )

Verwijder beide 'password' variabelen. Je kunt van het wachtwoord ook een String object maken. Geef die een nieuwe naam, om verwarring met oude code te voorkomen.

Bijvoorbeeld:

String myPassword = "batman";

void setup()
{
  ...
}

void loop()
{
  ...
  if (a == myPassword)
  {
    ...
  }
  ...
}

Je kunt van die 'myPassword' natuurlijk in de sketch iets anders van maken.

myPassword = "superman";

Als dat niet nodig is, dan kun je vergelijken met een gewone tekst:

if (a == "batman")

De logica van de code in de loop() ontgaat mij een beetje.

Ik weet niet of de fout bij mij zit of dat u misschien een fout heeft gemaakt,

String myPassword = "batman";

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available())
  {
    String a = Serial.readString();
    if (a == myPassword)
    {
      Serial.println("good");
    }
  }
}

Is dit hoe u bedoeld hoe ik dit moet doen?

Wel bedankt voor de hulp!!
Nanno.

Dat zou kunnen, maar dan werkt het alleen op een bepaalde speciale manier.

De seriële monitor kan iets achter de tekst plakken:

  • Geen Regeleinde
  • Nieuwe Regel \n of LF of LineFeed
  • Regelterugloop \r of CR of CarriageReturn
  • Zowel NL als CR

De Serial.readString() pakt dat teken gewoon mee. Als je die tekst (met dat extra teken) vergelijkt met "batman" dan is het niet hetzelfde.
Je zou kunnen definiëren dat er altijd een LineFeed achteraan moet komen en Serial.readStringUntil(\n) kunnen gebruiken. Maar als je dat even vergeet om in de seriële monitor goed te zetten, dan loopt opeens je sketch in de soep.

Er is een functie .trim() die ook de CarriageReturn en LineFeed weg haalt (ze behoren beiden tot de "whitespace").

De functie Serial.available() geeft een nummer terug.

Dan krijg ik dit:

String myPassword = "batman";

void setup()
{
  Serial.begin(9600);
  Serial.println( "Voer het wachtwoord in.");
}

void loop()
{
  if (Serial.available() > 0)
  {
    Serial.setTimeout( 500);        // 500 ms timeout for Serial.readString()
    String input = Serial.readString();
    input.trim();                   // remove any trailing \r and \n
    if (input == myPassword)        // compare
    {
      Serial.println("Success !");
    }
    else
    {
      Serial.println("Wrong password");
    }
  }
}

Ik heb iets tegen de functies zoals Serial.readString(). Zelf gebruik ik die liever niet.

JIPEEEEEEEEEEEEEEE!! het werkt!!!!!!!!
Bedankt!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Nanno.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.