Hola, llevo días luchando para salir de un bucle y no logro romperlo, el ejercicio consta de 3 secuencias de encendido y apagado de un motor con diferentes tiempos y su estado indicado por 2 leds (encendido y apagado), estas secuencias deben ejecutarse infinitamente al presionar un pulsador de inicio y desactivarse todo con otro pulsador, es aquí donde tengo el problema.
para arrancar me funciona perfecto, pero al pulsar para desactivar todo no me funciona, la única forma en que pare todo es manteniendo pulsado al final de la ejecución del código.
por lo que he buscado, la función break es la mas recomendada para salir de un bucle, pero en este caso, necesito que se desactive todo inmediatamente con el pulsador de parada.
he intentado el break de varias formas, en varias partes del codigo, dentro un while, dentro de un for infinito, con switchcase y ya agote mis conocimientos, no sé que estoy haciendo mal por lo que recurro a su ayuda.
la última y mejor opción que logre hacer es la siguiente:
int lede=12; //Led motor encendido
int leda=13; //Led motor apagado
int iniciar=8; //Pulsador Iniciar
int apagar=9; //Pulsador Apagar
int motor=6; //Motor
bool bi;
bool ba;
void setup() {
pinMode(lede,OUTPUT);
pinMode(leda,OUTPUT);
pinMode(motor,OUTPUT);
pinMode(iniciar,INPUT);
pinMode(apagar,INPUT);
}
void loop() {
bi = digitalRead(iniciar);
ba = digitalRead(apagar);
if (bi){
while(true){
for(int sec1=1;sec1<=3;sec1++){
analogWrite(motor,40);
digitalWrite(lede,1);
digitalWrite(leda,0);
delay(8000);
analogWrite(motor,0);
digitalWrite(lede,0);
digitalWrite(leda,1);
delay(3000);}
for(int sec2=1;sec2<=2;sec2++){
analogWrite(motor,40);
digitalWrite(lede,1);
digitalWrite(leda,0);
delay(4000);
analogWrite(motor,0);
digitalWrite(lede,0);
digitalWrite(leda,1);
delay(4000);}
for(int sec3=1;sec3<=1;sec3++){
analogWrite(motor,40);
digitalWrite(lede,1);
digitalWrite(leda,0);
delay(2000);
analogWrite(motor,0);
digitalWrite(lede,0);
digitalWrite(leda,1);
delay(8000);}
ba = digitalRead(apagar);
if (ba){
digitalWrite(lede,LOW);
digitalWrite(leda,HIGH);
analogWrite(motor,0);
break;}
}
}
else if (!bi) {
digitalWrite(lede,LOW);
digitalWrite(leda,HIGH);
analogWrite(motor,0);
}
}
de antemano muchas gracias.