Strange problem with Switch/Case

Hello Everyone, thank you in advance for your help.

I’m running a project, and I made a few custom libraries. One of them is called Pisada_c, this is the code:

Pisada:c.h

#ifndef Pisada_c_h
#define Pisada_c_h

#include <Arduino.h>
#include "Buzzer_c.h"
#include "Led_c.h"
#include "FlexiForce_c.h"


enum EstadoPisada_t
{
  Apoyo,
  Balanceo
};

enum Programa_t
{ Inicio,
  Calibracion,
  Comparacion
};


class Pisada_c
{
  public:
  //ATRIBUTOS
  Pisada_c();
  unsigned long tiempoPaso;
  unsigned long tiempoApoyo;
  unsigned long porcentajeApoyo;
  bool flagApoyo;
  bool flagPorcentaje;
  int contPasos;//hace que en el primer paso no se active la alarma ya que no se juntaron los datos para hacer el calculo
  Programa_t Programa;
  int porcentajeReferencia;
  int porcentajeReferencia_min;
  int porcentajeReferencia_max;
  
  //METODOS
  void fsmFaseMarcha();
  bool detectarPisada(FlexiForce_c *Sensor1, FlexiForce_c *Sensor2, FlexiForce_c *Sensor3);
  void calcularPorcentajeApoyo();
  void enviarAlerta(Buzzer_c* Buzzer, Led_c* Led);
  void calcularReferencias();
  
  
  private:
  //ATRIBUTOS
  unsigned long t0;//Inicio de la fase de apoyo
  unsigned long t1;//inicio de la fase de balanceo
  unsigned long tf;//Fin de la fase de balanceo y comienzo de una nueva fase de apoyo

  bool flagAlerta;

  EstadoPisada_t Estado;
  bool activarAlertas;
 
  int timeThreshold;//Genera efecto antirrebote en la fsmFaseMarcha
  
};
#endif

In Pisada_c.cpp i have the following function (it works fine).

Pisada_c.cpp

void Pisada_c::fsmFaseMarcha()
{
  switch(Estado)
  {
    case Apoyo:
      if(flagApoyo==false && millis()>t0+timeThreshold)
      {
        t1=millis();
        tiempoApoyo=t1-t0;
        Estado=Balanceo;
      }
      break;

    case Balanceo:
      if(flagApoyo==true && millis()>t1+timeThreshold)
      {
        tf=millis();
        tiempoPaso=tf-t0;
        t0=tf;
        flagPorcentaje=true;
        Estado=Apoyo;
        if(contPasos<10)contPasos++;
        if(contPasos>1 && Programa==Comparacion)	activarAlertas=true; 
      }
      break;
  }
}

As you see, I use the variable Estado for the switch, and everything is ok.

Anotherone of the libraries is FlexiForce_c

Flexiforce_c.h

#ifndef FlexiForce_c_h
#define FlexiForce_c_h
 
#include	<Arduino.h>
#include	<MedianFilterLib.h> 
#define	MAXRES 1023 //bit mas grande al que llega el ADC
#define WINLENGTH 61




enum estadoFF_t {
  Vacio,
  Ventana_VP,
  Presionado,
  Ventana_PV 
};

class FlexiForce_c
{
  public:
  //ATRIBUTOS
  FlexiForce_c(int _pin); //pin donde esta conectado el sensor
  int Vacio;//resultado del sensado en vacio
  int Umbral;//umbral con el que se considera valida la presion del sensor
  estadoFF_t Estado;
  bool cambio_presionado;//flag que detecta el cambio de vacio a presionado
  bool cambio_vacio;//flag que detecta el cambio de presionado a vacio
  int pin;
  
  //METODOS
  //void sensarVacio(int tf);//tiempo en ms durante el cual se sensa
  void calcularUmbral(int multiplicador_vacio); //cantidad de veces por la que se multiplica el valor en vacio para hallar el umbral
  void fsmUmbral(int Value);
  void llenarVentana();
  int adquirirFiltrado();
  
  private:
  //ATRIBUTOS
  //MedianFilter<int> medianFilter(WINLENGTH);
  //MedianFilter<int> medianFilter(61);
  MedianFilter<int> medianFilter=MedianFilter<int>(WINLENGTH);
  
  //METODOS
  
  
};
#endif

and in FlexiForce_c.cpp I’ve got a function really similar to the previous one

void FlexiForce_c::fsmUmbral(int Value)
 {
  switch(Estado)
  {
    case Vacio:
      if(Value>Umbral)
      {
        Estado=Ventana_VP;
      }
      break;
    
    case Ventana_VP: //puede ser que esto afecte el rendimiento al entrar en un ciclo for de mediciones?
      int cont,val;
      cont=val=0;
      for(int i=0;i<5;i++)
      {
       val=adquirirFiltrado(); 
       if(val>Umbral)cont++;
      }
      if(cont>3)
      {
        Estado=Presionado;
        Serial.print("Sensor ");
        //Serial.print(Sensor->pin);
        Serial.println(" presionado.");
      }else
      {
        Estado=Vacio;
      }
      break;

    case Presionado:
      if(Value<Umbral)
      {
        Estado=Ventana_PV;
      }
      break;

    case Ventana_PV:
     // int cont,val;
      cont=val=0;
      for(int i=0;i<5;i++)
      {
       val=adquirirFiltrado(); 
       if(val<Umbral)cont++;
      }
      if(cont>3)
      {
        Estado=Vacio;
        Serial.print("Sensor ");
        //Serial.print(Sensor->pin);
        Serial.println(" vaciado.");
      }else
      {
        Estado=Presionado;
      }
      
      break;
  }
 }

Well, this one is not working. I get an error with the use of Estado and it’s cases, but in the other library is fine. Can you help me? The error log is

C:\Users\brian\OneDrive\Documentos2\Arduino\libraries\FlexiForce_c\FlexiForce_c.cpp: In member function 'void FlexiForce_c::fsmUmbral(int)':

C:\Users\brian\OneDrive\Documentos2\Arduino\libraries\FlexiForce_c\FlexiForce_c.cpp:52:10: error: use of 'this' in a constant expression

     case Vacio:

          ^

C:\Users\brian\OneDrive\Documentos2\Arduino\libraries\FlexiForce_c\FlexiForce_c.cpp:52:10: error: 'this' is not a constant expression

C:\Users\brian\OneDrive\Documentos2\Arduino\libraries\FlexiForce_c\FlexiForce_c.cpp:75:15: warning: invalid conversion from 'int' to 'estadoFF_t' [-fpermissive]

         Estado=Vacio;

Thank you again!

Maybe because you have both an ‘enum’ and and ‘int’ named ‘Vacio’.

    case Ventana_VP: //puede ser que esto afecte el rendimiento al entrar en un ciclo for de mediciones?
      int cont,val;

If you declare a variable inside a case then you must enclose the case code in curly brackets