Arduino Leonardo - Cerradura Electrónica
Colocado enObtener el código de la entrada del usuario
Entonces, como describí en la parte 1, tenemos que obtener toda la entrada requerida del usuario y verificar el código con el guardado.
Y también verifique si la pantalla no se desborda. Eso es manejado por este código.
GetCode function
x
const unsigned char MaxPasscodeLength = 19;
unsigned char PasscodeLength;
char Data[MaxPasscodeLength];
char Master[MaxPasscodeLength];
unsigned char data_count = 0;
char Key;
void GetCode() { // This piece of code handles getting the code from the user
if (data_count < MaxPasscodeLength) {
Data[data_count] = Key;
lcd.setCursor(data_count,1);
lcd.print("*");
if (EnableDebug) {
Serial.println();
Serial.print("Data_count: ");
Serial.println(data_count);
Serial.print("Data: ");
Serial.println(Data[data_count]);
}
data_count++;
}
else {
lcd.setCursor(data_count,1);
lcd.print("*");
lcd.setCursor(0, 3);
lcd.print("Passcode Overflow");
if (EnableDebug) {
Serial.println();
Serial.println("Passcode Overflow Error");
}
_delay_ms(1000);
lcd.clear();
clearData();
}
}
Comprobando el código
También tenemos que comprobar si el código coincide con el código guardado, para saber cuándo podemos abrir la cerradura y cuándo no.
CheckCode Function
xxxxxxxxxx
97
void CodeCorrect() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Correct");
LockState = true;
_delay_ms(1000);
if (EnableDebug) {
Serial.println();
Serial.println("Opened");
}
}
void CodeIncorrect() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Incorrect");
if (EnableDebug) {
Serial.println();
Serial.println("Incorrect PSWD");
}
LockState = false;
_delay_ms(1000);
}
void OpenLock() {
if (EnableServo) {
Lock.write(90);
}
lcd.setCursor(0,0);
lcd.print("Lock Opened");
lcd.setCursor(0,2);
lcd.print("Press -* to lock");
if (EnablePasscodeChange) {
lcd.setCursor(3,3);
lcd.print("-# to change code");
}
TimeLastActivity = millis();
}
void CloseLock() {
if (EnableServo) {
Lock.write(180);
}
LockState = false;
lcd.clear();
if (EnableDebug) {
Serial.println();
Serial.println("Closing");
}
TimeLastActivity = millis();
}
void CheckCode() {
if(data_count == PasscodeLength){
Data[PasscodeLength] = 0;
_delay_ms(500);
lcd.clear();
if (EnableDebug) {
Serial.println();
Serial.print("Data: ");
Serial.println(Data);
Serial.print("Master: ");
Serial.println(Master);
}
if(!strcmp(Data, Master)){
CodeCorrect();
}
else{
if (EnableDebug) {
Serial.println();
Serial.print("PasscodeLength: ");
Serial.println(PasscodeLength);
Serial.print("DataCount: ");
Serial.println(data_count);
}
CodeIncorrect();
}
}
else {
if (EnableDebug) {
Serial.println();
Serial.print("Data: ");
Serial.println(Data);
Serial.print("Master: ");
Serial.println(Master);
Serial.println();
Serial.print("PasscodeLength: ");
Serial.println(PasscodeLength);
Serial.print("DataCount: ");
Serial.println(data_count);
}
CodeIncorrect();
}
lcd.clear();
clearData();
}