TODOPIC

Otros Microcontroladores / Dispositivos programables => Arduino => Mensaje iniciado por: MINDFIELD en 11 de Noviembre de 2018, 08:51:13

Título: pregunta muy de principiante... como usar un case
Publicado por: MINDFIELD en 11 de Noviembre de 2018, 08:51:13
Hola mi pregunta es esa como usar un case pero con un ejemplo de un codigo mio para entender mejor como se hace puede ser?
parte de un codigo que tengo es así

Código: [Seleccionar]
if (valorpin38mm == HIGH)
    {
      mm38 = mm38 + 19;

      if (mm38 < 100)
      {
        Lcd.setCursor(0, 2);
        Lcd.print("                    ");
        Lcd.setCursor(0, 2);
        Lcd.print("mm: ");
        Lcd.print(int(mm38));
      }

      if ((mm38 > 100) && (mm38 < 1000))
      {
        Lcd.setCursor(0, 2);
        Lcd.print("                    ");
        Lcd.setCursor(0, 2);
        Lcd.print("Cm: ");
        Lcd.print(mm38 / 10);
      }

      if (mm38 > 1000)
      {
        Lcd.setCursor(0, 2);
        Lcd.print("                    ");
        Lcd.setCursor(0, 2);
        Lcd.print("Mtrs: ");
        Lcd.print(mm38 / 1000);
      }

    }

pero no se como "acomodar" las lineas...
Título: Re:pregunta muy de principiante... como usar un case
Publicado por: KILLERJC en 11 de Noviembre de 2018, 10:11:19
En ese caso no hay forma de usar un switch..case, ya que la condicion del switch..case es una igualdad.. Por ejemplo:

Código: C
  1. switch(var) {
  2.   case 0:
  3.          //Aca algo
  4.          break;
  5.   case 1:
  6.          // Aca entra si var es 1
  7.          break;
  8.   default:
  9.          //Aca entra si no se cumple ninguna de las anteriores
  10.          break;
  11.   }

Si observas se necesita que el case sea el valor justo que tiene var.
En tu caso lo correcto, para no repetir algunas condiciones seria:

Código: C
  1. if (mm38 < 100)
  2.       {
  3.         Lcd.setCursor(0, 2);
  4.         Lcd.print("                    ");
  5.         Lcd.setCursor(0, 2);
  6.         Lcd.print("mm: ");
  7.         Lcd.print(int(mm38));
  8.  
  9.       } else if ( mm38 < 1000 ) {
  10.  
  11.         Lcd.setCursor(0, 2);
  12.         Lcd.print("                    ");
  13.         Lcd.setCursor(0, 2);
  14.         Lcd.print("Cm: ");
  15.         Lcd.print(mm38 / 10);
  16.  
  17.       } else {
  18.  
  19.         Lcd.setCursor(0, 2);
  20.         Lcd.print("                    ");
  21.         Lcd.setCursor(0, 2);
  22.         Lcd.print("Mtrs: ");
  23.         Lcd.print(mm38 / 1000);
  24.       }

Si observas priemro se pregunta si es menor a 100, si no lo es pasaria al else que pregunta si es menor a 1000, el mayor o igual a 100 ya esta incluido gracias al else. y Finalmente el ultimo else significa que ya paso por todos los anteriores y no se cumplio, es decir no es menor a 100 ni menor a 1000. Por lo tanto el unico que queda es que al entrar ahi es amyor o igual a 1000.
Título: Re:pregunta muy de principiante... como usar un case
Publicado por: Eduardo2 en 11 de Noviembre de 2018, 12:11:31
Además  de las comparaciones redundantes como señala Killerjc , estás repitiendo código inútilmente pues el borrado de la línea es común a todo.

Si en lugar de 3 rangos a comparar hubiese mas, convendría una secuencia de este tipo.

Código: C
  1. if (valorpin38mm == HIGH) {
  2.       mm38 = mm38 + 19;
  3.    
  4.       Lcd.setCursor(0, 2);
  5.       Lcd.print("                    ");
  6.       Lcd.setCursor(0, 2);
  7.      
  8.       if (mm38 < 100) {
  9.         Lcd.print("mm: ");
  10.         Lcd.print(int(mm38));
  11.       }
  12.       if (mm38 < 1000) {
  13.         Lcd.print("Cm: ");
  14.         Lcd.print(mm38 / 10);
  15.       }
  16.       else {
  17.         Lcd.print("Mtrs: ");
  18.         Lcd.print(mm38 / 1000);
  19.       }
  20.     }
  21.     }
Título: Re:pregunta muy de principiante... como usar un case
Publicado por: MINDFIELD en 12 de Noviembre de 2018, 10:09:13
gracias por responder y por los consejos y con razón me estaba quebrando la cabeza y no podia... por otro lado en el codigo de eduardo donde dices

 
Código: [Seleccionar]
if (mm38 < 100) {
        Lcd.print("mm: ");
        Lcd.print(int(mm38));
      }
      if (mm38 < 1000) {
        Lcd.print("Cm: ");
        Lcd.print(mm38 / 10);
      }

si supongamos tengo un valor (10) entraria por las dos condiciones... eso no entendi bien...
Título: Re:pregunta muy de principiante... como usar un case
Publicado por: Eduardo2 en 12 de Noviembre de 2018, 12:06:06
....
si supongamos tengo un valor (10) entraria por las dos condiciones... eso no entendi bien...

Perdón , perdón :)  El primero solo es if , los demás son else if .    A la primer coincidencia debe dejar de comparar.

Si fueran 5  rangos 

Código: C
  1. if (mm38 < x1) {
  2.         ............
  3.       }
  4.       else if (mm38 < x2) {
  5.         ............    
  6.       }
  7.       else if (mm38 < x3) {
  8.         ............    
  9.       }
  10.       else if (mm38 < x4) {
  11.         ............    
  12.       }
  13.       else {             ; El ultimo tramo
  14.         ............    
  15.       }