TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Joshuegp en 05 de Abril de 2020, 21:11:02

Título: Quiero ingresar condiciones utilizando "switch case" pero tengo errores.
Publicado por: Joshuegp en 05 de Abril de 2020, 21:11:02
Hola,

Estoy tomando los valores de un ADC, para ello colocar condiciones sin usar los "if" , ni "else if" y así sucesivamente. Por ello, opté por usar el "switch case", pero estoy teniendo demasiado errores, quisiera saber si alguien ha trabajado con ello y si podrían indicarme cual es la manera correcta o, cómo podría ser la forma adecuada. Dejo la parte del código:

float Vin;
int estadoSW;

.........

estadoSW =Vin;
                switch(estadoSW){
                    case (Vin>=0)&&(Vin<0.625):    // en vez de colocar "case 1" quiero colocar condiciones "case (condición)".
                     XLCDgotoXY(1,0);
                     putcXLCD(0);
                     __delay_ms(500);
                    break;



Y la falla que me aparece es la siguiente:

error: (188) constant expression required



Muy agradecido por el apoyo.
Título: Re:Quiero ingresar condiciones utilizando "switch case" pero tengo errores.
Publicado por: KILLERJC en 05 de Abril de 2020, 22:39:45
Citar
error: (188) constant expression required

Algunas cosas que necesitas saber del switch..case

Solo números sin signo y enteros. Y los case son valores fijos... Ejemplo:

Código: C
  1. switch(estados)
  2. {
  3.        case 1:
  4.        case 2:
  5.        case 3:
  6.        default:
  7. }

Podes observar que en los case, son valores FIJOS, y no algo a evaluar como vos escribiste:

case (Vin>=0)&&(Vin<0.625):

Si queres separarlo cada 0.625 entonces podrias hacer:

Código: C
  1. estadoSW = Vin/0.625;
  2. switch(estadoSW){
  3.   case 0:  //entre 0 y 0.625
  4.   case 1: // entre 0.625 inclusive y 1.25
  5.   case 2: // entre 1.25 inclusive y 1.875
  6.   default: // Caso que no esta incluido en los anteriores.
  7. }
Título: Re:Quiero ingresar condiciones utilizando "switch case" pero tengo errores.
Publicado por: Joshuegp en 05 de Abril de 2020, 22:59:12
Citar
Si queres separarlo cada 0.625 entonces podrias hacer:

Estimado, muy agradecido. Me resultó excelente dicha solución.

Citar
case (Vin>=0)&&(Vin<0.625):

Ahora, si tengo varias condiciones y ya no son correlativas, solo me quedaría usar las condición "if", "else if" o hay algún otro método o condiciones para evitar el uso de estos, ya que los "switch(case)" no evaluan.


Gracias.



Título: Re:Quiero ingresar condiciones utilizando "switch case" pero tengo errores.
Publicado por: KILLERJC en 06 de Abril de 2020, 00:13:48
No te queda mas que usar if/else.

Aunque podés inventar algo con un for y un if, pero no sé si sería más sencillo.