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.
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.