A tu código no le pasa nada, hace precisamente lo que tiene que hacer.
Loop es un bucle que se ejecuta indefinidamente, como dentro tienes la llama al método cifrado, este es llamado una y otra vez.
Cifrado, lo que hace es mostrar el mensaje, lee lo que hay en el puerto serie, comprueba si es un 1 y finaliza, retornando al loop que a su vez vuelve a ejecutar el método cifrado.
Por lo tanto para que tu programa funcione como quieres, tendrás que mantener la ejecución en el método cifrazo de alguna manera hasta que recibas el código, por ejemplo con un do....while.
También te aconsejo leas este enlace donde explica como recibir datos por el puerto serie correctamente, como lo estás haciendo no es la forma ideal.
Bien, tienes razón, no son óptimos mis métodos. Como se debe notar, soy nuevo en el lenguaje de Arduino, es decir, conozco C/C++ aunque nunca lo usé con microcontroladores. No logro entender bien cómo se usa, ¿Podrías darme un ejemplo de código para lo que quiero hacer?
#include<SoftwareSerial.h>
#include<Servo.h>
Servo myServo;
int ang = 90;
int pass = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
cifrado();
}
void cifrado(){
if(Serial.available() > 0){
pass = Serial.read();
Serial.print(pass);
if(pass == 49){ //49 es el 1 en decimal ASCII.
Serial.print("Correcto.");
}else{
Serial.print("Lo siento, la contrasenia es incorrecta");
}
}
}
Me pasa que en el monitor serie pongo 1 y luego debo apretar enter, lo cual envía un retorno de carro, o sea, 13 en decimal ASCII. Entonces, me manda al else y muestra lo siguiente:
49Correcto.
13Lo siento, la contrasenia es incorrecta.
Bien, ahora quisiera que se puedan escribir al menos 4 números, pero el programa sólo toma al primero.
Ya intenté pasar el tipo de dato de la variable 'pass' a char y a String, pero resulta que no hace caso porque el Arduino toma los caracteres uno por uno.
O sea que si pongo "1234" como contraseña, programa escribe:
1 - Lo siento, la contrasenia es incorrecta
2 - Lo siento, la contrasenia es incorrecta
3 - Lo siento, la contrasenia es incorrecta
4 - Lo siento, la contrasenia es incorrecta
Dejo el código que usé:
#include<SoftwareSerial.h>
#include<Servo.h>
Servo myServo;
int ang = 90;
String pass;
void setup(){
Serial.begin(9600);
}
void loop(){
cifrado();
}
void cifrado(){
if(Serial.available() > 0){
pass = Serial.readStringUntil('\n');
if (pass != 13) {
Serial.print(pass);
if (pass == "1234"){
Serial.println(" - Correcto.");
}else{
Serial.println(" - Lo siento, la contrasenia es incorrecta");
}
}
}
}