Hello. I am doing my first ever Arduino project, which basically consists of a password verification.
The correct password has 24 characters and I intend the Arduino to light a green LED if the password is correct and a red LED if incorrect. However, by entering just the first four numbers, the red LED already lights up. I have tried looking for many solutions, but it always keeps happening.
I am facing great struggle. Any help is appreciated. Code is below:
int ledVermelho = 13;
int ledVerde = 12;
char input[25];
byte contador = 0;
int verificacao;
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
pinMode(ledVermelho, OUTPUT);
pinMode(ledVerde, OUTPUT);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
input[contador] = customKey;
contador++;
}
if (contador == 24){
verificacao = verify(input);
if (verificacao == 0){
digitalWrite(ledVerde, HIGH);
digitalWrite(ledVermelho, LOW);}
clearData();
if (verificacao == 1){
digitalWrite(ledVerde, LOW);
digitalWrite(ledVermelho, HIGH);}
clearData();
}
if (contador > 24){
digitalWrite(ledVerde, LOW);
digitalWrite(ledVermelho, HIGH);}
clearData();
}
void clearData() {
while (contador != 0) {
input[contador--] = 0;
}
return;
}
Verify function:
int verify(char chave[24]){
Serial.println("entrei");
int contador2;
int i2;
int points = 0;
if ((chave[0] <= chave[8]) && (chave[0] <= chave[16]) && (chave[8] >= chave[16])){
return 1;
}
else {
char val1[2] = "0";
char val2[2] = "0";
char val3[2] = "0";
float eigvet1[3] = {0.0, 0.0, 0.0};
float eigvet2[3] = {0.0, 0.0, 0.0};
contador2 = 0;
while (contador2 < 17){
char temp[3] = "00";
temp[0] = chave[contador2];
temp[1] = chave[contador2 + 1];
int singtemp = atoi(temp);
float singval = (float)singtemp;
float eigval = ((singval/10.0) * (singval/10.0));
if (contador2 == 0){
val1[0] = chave[5];
val2[0] = chave[13];
val3[0] = chave[21];
eigvet2[0] = atoi(val1);
eigvet2[1] = atoi(val2);
eigvet2[2] = atoi(val3);
val1[0] = chave[contador2 + 1];
val2[0] = chave[contador2 + 2];
val3[0] = chave[contador2 + 3];
eigvet1[0] = atoi(val1);
eigvet1[1] = atoi(val2);
eigvet1[2] = atoi(val3);
}
if (contador2 == 8){
val1[0] = chave[6];
val2[0] = chave[14];
val3[0] = chave[22];
eigvet2[0] = atoi(val1);
eigvet2[1] = atoi(val2);
eigvet2[2] = atoi(val3);
val1[0] = chave[contador2 + 1]*(-1.0);
val2[0] = chave[contador2 + 2];
val3[0] = (chave[contador2 + 3]);
eigvet1[0] = atoi(val1);
eigvet1[1] = atoi(val2);
eigvet1[2] = atoi(val3);
}
if (contador2 == 16){
val1[0] = chave[7];
val2[0] = chave[15];
val3[0] = chave[28];
eigvet2[0] = atoi(val1);
eigvet2[1] = atoi(val2);
eigvet2[2] = atoi(val3);
val1[0] = chave[contador2 + 1]*(-1.0);
val2[0] = chave[contador2 + 2]*(-1.0);
val3[0] = (chave[contador2 + 3]);
eigvet1[0] = atoi(val1);
eigvet1[1] = atoi(val2);
eigvet1[2] = atoi(val3);
}
eigvet1[0] = (eigvet1[0]/10);
eigvet2[0] = (eigvet2[0]/10);
eigvet1[1] = (eigvet1[1]/10);
eigvet2[1] = (eigvet2[1]/10);
eigvet1[2] = (eigvet1[2]/10);
eigvet2[2] = (eigvet2[2]/10);
float result11[3] = {eigval * eigvet1[0], eigval * eigvet1[1], eigval * eigvet1[2]};
float result12[3] = {eigval * eigvet2[0], eigval * eigvet2[1], eigval * eigvet2[2]};
float result21[3] = {29.1, 18.9, 7.6};
float result22[3] = {7.1, 5.2, 30.4};
for (i2 = 0; i2 < 3; i2++)
{
if (((int)result11[i2] - (int)result21[i2]) < 1){
points++;
}
if (((int)result12[i2] - (int)result22[i2]) < 1){
points++;
}
}
contador2 = contador2 + 8;
}
if (points == 18){
return 0;
}
}
}