Parcial: problemas con la función "switch"

Parcial: problemas con la función "switch"

de Ignacio Sebastián Rosas Hernández -
Número de respuestas: 3
Notamos que al implementar la función switch para el estado de la alarma se ejecuta su interior únicamente una vez, es decir, solo detecta movimiento y sonido instantáneo en el instante que cambia de estado ,y no luego.
adjuntamos la sentencia switch en loop:

switch(estadoAlarma){

    

    case 2:

    Serial.println("entrando en estado de alarma completa");

    digitalWrite(PIN_LED_SETUP_PARCIAL, LOW);

    digitalWrite(PIN_LED_SETUP_COMPLETA, HIGH);

    distanciaMediaEstar=distanciaInicial(PIN_TRIGGER_ESTAR, PIN_ECHO_ESTAR);

    distanciaMediaCuarto=distanciaInicial(PIN_TRIGGER_CUARTO,PIN_ECHO_CUARTO);

    Serial.println(sonidoEstar(PIN_MIC_ESTAR, UMBRAL_SONIDO_ESTAR));

    if(actividadSEstar==HIGH||actividadUSEstar==HIGH||actividadSCuarto==HIGH||actividadUSCuarto==HIGH){

      encenderAlarma(PIN_LED, PIN_BUZZER, FRECUENCIA);

      Serial.println("ALARMA ACTIVADA");

      }else{

      apagarAlarma(PIN_LED, PIN_BUZZER);

    }


      break;

    case 1:

    Serial.println("entrando en estado de alarma parcial");

      digitalWrite(PIN_LED_SETUP_COMPLETA, LOW);

      digitalWrite(PIN_LED_SETUP_PARCIAL, HIGH);

      distanciaMediaEstar=distanciaInicial(PIN_TRIGGER_ESTAR, PIN_ECHO_ESTAR);

    

    if(actividadSEstar==HIGH||actividadUSEstar==HIGH||actividadSCuarto==HIGH){

      encenderAlarma(PIN_LED, PIN_BUZZER, FRECUENCIA);

      Serial.println("ALARMA ACTIVADA");

    }else{

      apagarAlarma(PIN_LED, PIN_BUZZER);

    }

       break;

    case 0:

    Serial.println("ALARMA DESACTIVADA");

    digitalWrite(PIN_LED_SETUP_PARCIAL, LOW);

    digitalWrite(PIN_LED_SETUP_COMPLETA, LOW);

    apagarAlarma(PIN_LED, PIN_BUZZER);

      break;

      

    default:

    Serial.println("ALARMA ACTIVADA por default");

    encenderAlarma(PIN_LED, PIN_BUZZER, FRECUENCIA);

    digitalWrite(PIN_LED_SETUP_PARCIAL, HIGH);

    digitalWrite(PIN_LED_SETUP_COMPLETA, HIGH);

  }  

  }

En respuesta a Ignacio Sebastián Rosas Hernández

Parcial: problemas con la función "switch"

de Mateo Agustín Graña Vega -

Holaa buenas

Nosotros tambien tenemos un problema con la función Switch.

A pesar de que leamos la clave y actualicemos el estado de la alarma sólo se nos ejecuta un caso de la función ,independientemente del estado de alarma que se imponga.

Código Simplificado:

  claveIngresada = ingresoClave(2,4,7,9,pad,false);

   if(claveIngresada == CLAVE_ACT){   

     estadoAlarma = 2;

   if(claveIngresada == CLAVE_PAR){

     estadoAlarma = 1;}

  if(claveIngresada == CLAVE_DES){

     estadoAlarma = 0;}

   //ESTADO DE LA ALARMA 

     switch(estadoAlarma){

     case 2:                 //Alarma Total

     Serial.println("CASO 2");  

     Serial.println(estadoAlarma);

     break;

     case 1:                //Alarma Parcial 

        Serial.println("CASO 1");   

        Serial.println(estadoAlarma); 

     break; 

     case 0:               //Alarma Desactivada

     Serial.println("CASO 0");     

     Serial.println(estadoAlarma); 

     break;

          }

    }

En respuesta a Mateo Agustín Graña Vega

Re: Parcial: problemas con la función "switch"

de Joaquin Vidart Canziani -
Buenas Mateo
Puede probar como ya están haciendo mediante los Serial.print(), el ver primero si claveIngresada es lo que esperan y así aseguraste que entra en algún if. Y por otro lado ver qué pasa con estadoAlarma, chequear que al realizar nuevamente el loop no cambie de estado.
En respuesta a Ignacio Sebastián Rosas Hernández

Re: Parcial: problemas con la función "switch"

de Joaquin Vidart Canziani -
Buenas
Lo primero que me gustaría comentar es el hecho de publicar código o soluciones explícitas en el foro, no lo recomiendo ya que rompe con la ética de trabajo. Para un futuro estaría bueno a lo sumo adjuntar un link al proyecto de Tinkercad.

Con respecto a su problema, es difícil dar una respuesta certera solo viendo ese fragmento de código. Se me ocurre que halla algo dentro del Void loop() que esté llevando nuevamente el estado al default, por eso solo ejercita un estado diferente una única vez.

Espero eso ayude, cualquier cosa no duden en volver a consultar.