Problema con dos funciones accediendo a la misma variable.

int fuego=22;        //digital
int humo=23;
int zumbador=53;  //digital
int elecgas=51; //digital
void setup() {
    pinMode(fuego,INPUT_PULLUP);     //int, digital
    pinMode(humo,INPUT_PULLUP);     //int, digital
    pinMode(zumbador,OUTPUT); //digital
    pinMode(elecgas,OUTPUT);  //digital
}void loop() {
      FUEGO();
      HUMO();
}
void FUEGO(){
  if (digitalRead(fuego)==LOW){
   digitalWrite(zumbador,HIGH);
   digitalWrite(elecgas,LOW);
}else{
    digitalWrite(zumbador,LOW);
    digitalWrite(elecgas,HIGH);
}
}
void HUMO(){
  if (digitalRead(humo)==LOW){
    digitalWrite(zumbador,HIGH);
    digitalWrite(elecgas,LOW);
  }else{
    digitalWrite(zumbador,LOW);
    digitalWrite(elecgas,HIGH);
  }
}

Hola arduiners.
Mi problema es el siguiente:
Cuando el interruptor de fuego o humo está en LOW, el zumbador se pone en HIGH y cuando el interruptor está en HIGH, el zumbador se pone en LOW, tal y como quiero. Sin embargo, elecgas está siempre en HIGH, independientemente de lo que haga. ¿¿Qué está pasando??

Nota: Si solo uso una de las funciones, ambas salidas funcionan correctamente.

En principio tenes los interruptores en HIGH por las resistencias pull-up. Entonces elecgas va a estar siempre en HIGH salvo cuando uno de los pulsadores se cierra.
Pero fijate que pasa si uno de los pulsadores se cierra y el otro no.
Supongamos que pulsas fuego, FUEGO() pone elecgas en LOW pero inmediatamente llamas a HUMO() y lo pone en HIGH.
Y asi repetidamente hasta que sueltes el pulsador.

O sea que elecgas ésta continuamente cambiando de estado. Y lo mismo ocurre con zumbador.

Y si solo pulsas humo, te pasa lo mismo.
¿Se entiende?

Por otro lado, por convención, se usan mayúsculas para los nombres de constantes, minúsculas para variables y las funciones se nombran por ej. hayFuego() o hay_fuego().
Eso ayuda a entender más facilmente el código a quienes debemos interpretarlo.

Edito:
En este caso particular, aunque no se si te serviría para tu proyecto, haría

int fuego=22;        //digital
int humo=23;
int zumbador=53;  //digital
int elecgas=51; //digital

void setup() {
    pinMode(fuego,INPUT_PULLUP);     //int, digital
    pinMode(humo,INPUT_PULLUP);     //int, digital
    pinMode(zumbador,OUTPUT); //digital
    pinMode(elecgas,OUTPUT);  //digital
}

void loop() {
  if (!digitalRead(fuego) || !digitalRead(humo)){ //cualquiera de los 2 en LOW
    digitalWrite(zumbador,HIGH);
    digitalWrite(elecgas,LOW);
  }else{ //ambos en HIGH
    digitalWrite(zumbador,LOW);
    digitalWrite(elecgas,HIGH);
  }
}

Porque cualquiera sea el botón que pulsas tiene que sonar el zumbador y cortar el gas.

Saludos

Moderador
Por favor edita tu post inicial retirando los caracteres color que provienen de alguna página Web.

gatul:
En principio tenes los interruptores en HIGH por las resistencias pull-up. Entonces elecgas va a estar siempre en HIGH salvo cuando uno de los pulsadores se cierra.
Pero fijate que pasa si uno de los pulsadores se cierra y el otro no.
Supongamos que pulsas fuego, FUEGO() pone elecgas en LOW pero inmediatamente llamas a HUMO() y lo pone en HIGH.
Y asi repetidamente hasta que sueltes el pulsador.

O sea que elecgas ésta continuamente cambiando de estado. Y lo mismo ocurre con zumbador.

Y si solo pulsas humo, te pasa lo mismo.
¿Se entiende?

Por otro lado, por convención, se usan mayúsculas para los nombres de constantes, minúsculas para variables y las funciones se nombran por ej. hayFuego() o hay_fuego().
Eso ayuda a entender más facilmente el código a quienes debemos interpretarlo.

Edito:
En este caso particular, aunque no se si te serviría para tu proyecto, haría

int fuego=22;        //digital

int humo=23;
int zumbador=53;  //digital
int elecgas=51; //digital

void setup() {
   pinMode(fuego,INPUT_PULLUP);     //int, digital
   pinMode(humo,INPUT_PULLUP);     //int, digital
   pinMode(zumbador,OUTPUT); //digital
   pinMode(elecgas,OUTPUT);  //digital
}

void loop() {
 if (!digitalRead(fuego) || !digitalRead(humo)){ //cualquiera de los 2 en LOW
   digitalWrite(zumbador,HIGH);
   digitalWrite(elecgas,LOW);
 }else{ //ambos en HIGH
   digitalWrite(zumbador,LOW);
   digitalWrite(elecgas,HIGH);
 }
}



Porque cualquiera sea el botón que pulsas tiene que sonar el zumbador y cortar el gas.

Saludos

Muchísimas gracias, me has sido de gran ayuda.
Un saludo.

Moderador
Lee el privado.

Si el tema esta solucionado edita el título con un [SOLUCIONADO]