Buenos dias nuevamente!
En este codigo tengo una consulta mas por comodidad que por error de codigo.
El programa enciende un patron de luces con la tecla R, y otro patron con la tecla V, el tema es que me gustaría que el mensaje que le puse para cada tecla, se muestre solo una vez y las luces brillen infinitamente, O HASTA QUE YO APRETE OTRA TECLA. Por lo tanto, las dos soluciones que me dio mi profesor para la primera inquietud, fue usar un for (int i=0,i<10<i++) despues del print, o usar un while(true), pero en el caso del for, tengo que esperar a que termine las 10 repeticiones para poder activar el otro patrón, y en el caso del while(true), el patron de luces que elija se repite infinitamente, pero no puedo usar el otro ya que el ciclo nunca termina, y nose como interrumpirlo. Se puede hacer lo que yo quiero hacer? como? Adjunto mi codigo uwu.
int rojo = 2;
int azul = 8;
int verde = 5;
int amarillo = 3;
char baliza;
boolean ingresoDeLetra=false;
void setup(){
Serial.begin(9600);
pinMode(rojo, OUTPUT);
pinMode(azul,OUTPUT);
pinMode(amarillo, OUTPUT);
pinMode(verde,OUTPUT);
Serial.println("Buenas noches, se adjunta instructivo:");
Serial.println("Este programa emula dos patrones de luces de policia.");
Serial.println("1)Para utilizar baliza roja y azul oprima R.");
Serial.println("2)Para utilizar baliza verde y amarillo oprima V.");
Serial.println("3)Para apagar la patrulla y el programa oprima S.");
}
void loop(){
if (Serial.available() > 0){
baliza = Serial.read();
ingresoDeLetra = true;
}
if(ingresoDeLetra == true){
if(baliza=='r' || baliza=='R'){
Serial.println("Usted ha activado la baliza roja y azul.");
for(int i=0;i<10;i++){
digitalWrite(rojo,HIGH);
delay(250);
digitalWrite(rojo,LOW);
delay(250);
digitalWrite(azul,HIGH);
delay(250);
digitalWrite(azul,LOW);
delay(250);
}
}else if (baliza=='v' || baliza=='V'){
Serial.println("Usted ha activado la baliza verde y amarillo");
while(true){
digitalWrite(verde,HIGH);
delay(250);
digitalWrite(verde,LOW);
delay(250);
digitalWrite(amarillo,HIGH);
delay(250);
digitalWrite(amarillo,LOW);
delay(250);
}
}else if (baliza=='s'|| baliza=='S'){
Serial.println("Se ha apagado la patrulla.");
digitalWrite(azul,LOW);
digitalWrite(amarillo,LOW);
digitalWrite(verde,LOW);
digitalWrite(rojo,LOW);
delay(2000);
}
ingresoDeLetra = false;
}
}
“
Good morning again!
In this code I have a query more for convenience than for code error.
The program turns on a pattern of lights with the R key, and another pattern with the V key, the issue is that I would like the message that I put for each key to be displayed only once and the lights shine infinitely, OR UNTIL I PRESSED ANOTHER KEY. Therefore, the two solutions that my teacher gave me for the first question, was to use a for (int i = 0, i <10 <i ++) after the print, or to use a while (true), but in the case of for I have to wait for the 10 repetitions to finish to be able to activate the other pattern, and in the case of the while (true), the pattern of lights that I choose is repeated infinitely, but I cannot use the other one since the cycle never ends, And I don't know how to interrupt it. Can you do what I want to do? What? I attach my uwu code.
“
google translate 4 U
a7
1 Like
Antes que nada, este tema tendría que ser continuación del anterior no un tema nuevo.
En cuanto a la consulta, me llama la atención que el profesor te diga que uses while(true) a sabiendas de que no vas a poder salir de ahí, pero bueh... Vamos al asunto.
En lugar de correr cada secuencia desde el if() tendrías que setear una variable que indique cual secuencia corresponde ejecutar, luego con otro if() o switch() ejecutas la secuencia que corresponda.
Algo así (solo lo pongo parcialmente)
// en las definiciones
int secuencia = 0;
// en el loop()
if(ingresoDeLetra == true){
if(baliza=='r' || baliza=='R'){
Serial.println("Usted ha activado la baliza roja y azul.");
secuencia = 1;
}
else if( // la otra comparación y el mensaje
secuencia = 2;
}
else if( // y la ultima comparación y su mensaje
secuencia = 3;
}
ingresoDeLetra = false;
}
// luego (aca puede usarse switch() en lugar de if())
if(secuencia == 1) secuencia1();
else if(secuencia == 2) secuencia2();
else if(secuencia == 3){
secuencia3();
secuencia = 0;
}
} // fin de loop()
void secuencia1(){
// enciendes y apagas los leds rojos y azules...
}
// y las otras 2 secuencias
Pongo secuencia en 0 luego de ejecutar secuencia3 (la que apaga la patrulla) para que ya no se ejecute ninguna secuencia hasta que ingreses una tecla nueva porque no tendría sentido apagar lo que ya está apagado.
Saludos
1 Like
Gracias por tu respuesta, lo intentaré ahora mismo!
Genial! una vez mas me has enseñado un montón amigo! te agradezco mucho, ahora si funciona como quería, y tenías razón, para que el mensaje no se mostrara tenía que usar lo que me enseñaste en el tema anterior, el if( ingresoDeLetra==true) y al terminar poner que ingresoDeLetra= false, para que no leyera denuevo el print, pero si siguiera haciendo bucle en la secuencia 1 o 2, de esa manera consigo ambas cosas, mostrar el mensaje 1 vez y repetir el patrón de luces infinitamente. MUCHAS MUCHAS GRACIAS NUEVAMENTE <3.
De nada.
Lo importante es que lo entiendas y aprendas. 
Saludos
1 Like