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.
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.