Duda y ayuda con mi programa prender led y apagar

Hola espero me puedan ayudar ya que intento hacer un programa en arduino uno el cual es el siguiente:

int BANDA = 19; 
int BOMBA = 18; 
int ELEV = 17; 
int ARRANQUE = 6;
int PARO = 7;

void setup() 
{

pinMode(ARRANQUE, INPUT);
pinMode(PARO, INPUT);
pinMode(BANDA, OUTPUT);
pinMode(BOMBA, OUTPUT);
pinMode(ELEV, OUTPUT);
}


void loop() 
{
 if(digitalRead(ARRANQUE)==HIGH)
 {
 do
 {
 digitalWrite(BANDA, HIGH);
delay(4000);
 digitalWrite(BOMBA, HIGH);
delay(4000);
 digitalWrite(BOMBA, LOW);
 digitalWrite(ELEV, HIGH);
 delay(1500);
 digitalWrite(ELEV, LOW);
} while (PARO==LOW);
}
if(digitalRead(PARO)==HIGH)
{do{digitalWrite(BOMBA, LOW);
digitalWrite(ELEV, LOW);
digitalWrite(BANDA, LOW);
}
while (ARRANQUE==LOW);
}}

Quiero tener dos botones uno de paro y otro de arranque cuando se apriete el de arranque se hagan las funciones de encender las variables con nombre BOMBA, ELEV y BANDA eso hasta ahora lo hago con leds y funciona pero cuando se aprieta el boton de paro la secuencia no se apaga, ningun led se apaga , quisiera saber en que estoy mal o que me ayuden a darle solucion de antemano gracias.

Lo que debes hacer es definir una variable booleana de este modo

bool estadoArranque = false; 
bool estadoParo = false;

estas variables toman dos estados 1 o 0. falso o verdadero (true).

Cuando presiones el boton ARRANQUE pones la variable estadoArranque en true y estadoParo en false.
Cuando presiones el botón PARO pones la variable estadoParo en true y estadoArranque en false.
cuando consultes por el valor de estadoArranque y si es uno haras la secuencia que tenías y luego pones en 0 la variable estadoArranque con lo que no se ejecutará mas.
Lo mismo cuando detengas.

const byte BANDA = 19; 
const byte BOMBA = 18; 
const byte ELEV = 17; 
const byte ARRANQUE = 6;
const byte PARO = 7;
bool estadoArranque = false;
bool estadoParo = false;
byte leoArranque, leoArranqueAnt = 0;
byte leoParo, leoParoAnt = 0;

void setup()  {

 pinMode(ARRANQUE, INPUT);
 pinMode(PARO, INPUT);

 pinMode(BANDA, OUTPUT);
 pinMode(BOMBA, OUTPUT);
 pinMode(ELEV, OUTPUT);
}


void loop()  {

 leoArranque = digitalRead(ARRANQUE);
 leoParo = digitalRead(PARO);

 if (leoArranque == HIGH && leoArranqueAnt == LOW) {
 estadoArranque = true;
 estadoParo = false;
 }

 leoArranqueAnt = leoArranque;

 if (leoParo == HIGH && leoParoAnt == LOW) {
 estadoArranque = false;
 estadoParo = true;
 }
 leoParoAnt = leoParo;

 if (estadoArranque) {
 digitalWrite(BANDA, HIGH);
 delay(4000);
 digitalWrite(BOMBA, HIGH);
 delay(4000);
 digitalWrite(BOMBA, LOW);
 digitalWrite(ELEV, HIGH);
 delay(1500);
 digitalWrite(ELEV, LOW);
 estadoArranque = false; // ya se ejecutó asi que no lo hago mas
 }

 if (estadoParo) {
 digitalWrite(BOMBA, LOW);
 digitalWrite(ELEV, LOW); 
 digitalWrite(BANDA, LOW);
 estadoParo = false;         // ya se ejecutó asi que no lo hago mas
 }
}
1 Like