Digitos de una variable en una resta.

Colapsar
X
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar todos
nuevos mensajes

  • Digitos de una variable en una resta.

    Estimado, tengo un problema aver si alguno le paso. Estoy programando en C (y algunas Funciones minimas de C++) sobre una placa STM32f013 , que es parecida a una arduino, un poco mas potente y con pantalla tactil.

    Tengo unos botones que suman o restan sobre una variable tipo int.

    Cuando oprimo el boton , lo hace bien, cuando suma o resta, el tema esta en que cuando tengo 11 , le resto 1, y me muestra en pantalla 10, ok, uno menos y me aparece 90

    si sumo o resto lo hace bien, lo que pasa es que el digito 0 no lo borra, queda cargado con cero, si le sumo uno vuelve a 10 bien.

    el codigo seria algo asi :

    Código:
    int valor=0;
    char varPantalla[3];
    
    valor=14;
    
    void Bton_LCD_Dwn(u8 index){
        if (index==1){
               if(valor>=0){
                     valor=valor-1;
                     strcpy(varPantalla,""); 
                     itoa(valor,varPantalla,10);
                }
            }
    }
    Sinteticamente es eso, despues la rutina que dibuja la pantalla dibuja y muy bien un monton de otros datos y controles, solo esto es lo que me falta y no puedo hacer que cuando este en 10 , me quede en 9 y no en 90.
    Alguien me tira una soga? gracias
    Última edición por KADOSH; 21-05-2015, 02:16 PM.

  • #2
    Re: Digitos de una variable en una resta.

    Bueno, desconozco el compilador C o C++ que utiliza el micro que estás programando, pero iniciamente te recomendaría umentar la dimensión del array char (por ejemplo a 10 o 20) y usar printf para mostrar el resultado.


    Código:
    int valor = 14;
    char varPantalla[20];
    
    void Bton_LCD_Dwn(u8 index)
    {
        if (index==1)
        {
               if(valor>=0)
              {
                     valor -= 1;
                     itoa(valor,varPantalla,10);
                     printf(%s\n, varPantalla);
               }
            }
    }

    Este código en principio es un C puro y creo que debería funcionar tal y como esperas.
    Un cordial saludo
    -Acalanto-

    Madrid - España

    Leer detalladamente las normas del foro es una buena forma de comenzar a participar en él. Te llevará unos pocos minutos y el colectivo de usuarios te lo agradecerá. <si no las has leído sigue este enlace>

    Comentario


    • #3
      Re: Digitos de una variable en una resta.

      Gracias Acalanto, siempre tan amable y solidario

      Probe con aumentar la matriz, o el Array, no cambio nada, lo de valor -= es lo mismo que lo que hago yo por costumbre de programar en vb jeje asi que eso no soluciono nada tampoco.

      Estoy usando el IDE de Keil un entorno para estas y otras placas, es muy bueno. Algo habia leido una vez de esto pero no me acuerdo donde y como se solucionaba. Lamentablemente lo de printf no lo puedo usar. Mañana veo si puedo usar alguna forma de conversion, no se quizas con algun bucle que recorra el array y lo vuelva a cargar en otro con los digitos arreglados, queria evitar hacer una funcion asi , seguramente hay una forma mas simple y eficiente, pero la verdad es que hace una semana que estoy buscando... Gracias de todos modos.

      Comentario


      • #4
        Re: Digitos de una variable en una resta.

        Hola estimados colegas, un gusto en saludarlos, que agradable es ver actividad en este apasionante lenguaje.

        Recientemente estuve mirando la función sprintf, tal vez sea útil en este caso. Por ejemplo:
        Código:
        int valor = 0;
        char varPantalla[3];
        
        valor = 14;
        
        void Bton_LCD_Dwn(u8 index)
        {
            if (index == 1)   // ¿?
            {
                if (valor > 0)  // El valor debe ser mayor que cero para evitar negativos.
                {
                    valor--;
        
                    sprintf(varPantalla, "%3i", valor);
                    // %3i = int de 3 cifras con alineación derecha.
        
                }// if
        
            }// if
        
        }// void
        Saludos cordiales.
        Saludos.

        Comentario


        • #5
          Re: Digitos de una variable en una resta.

          Entiendo que el problema se produce por la ubicación del cursor en la pantalla, dejándote restos de la muestra anterior.

          Yo hace muchísimo que no trabajo con C puro para ms-dos o unix, y las pequeñas cosas que hago con arduino son para controlar motores y sensores, nunca para dialogar con el usuario.

          No obstante, creo recordar que laticce-C y Borland tenían para trabajar en consola una primitiva para posicionar el cursos (pos(x,y) o locate(x,y)), con la que puedes borrar lo existente en ese lugar y actualizar el nuevo valor.

          Otra posibilidad es que escribas una función que inserte caracteres blancos por la izquierda para enmascarar lo escrito.

          Lástima que tu compilador no disponga de printf o sprintf como te aconseja Javinet.
          Un cordial saludo
          -Acalanto-

          Madrid - España

          Leer detalladamente las normas del foro es una buena forma de comenzar a participar en él. Te llevará unos pocos minutos y el colectivo de usuarios te lo agradecerá. <si no las has leído sigue este enlace>

          Comentario


          • #6
            Re: Digitos de una variable en una resta.

            Realmente es como dices, lo que no puedo ver si los residuos son en la memoria que trata el array o en la libreria que trata el display, pero sucede. Probe de las dos formas y nada, asi que lo solucione de la manera mas chapusera posible... con un switch que a cada valor lo remplaza con un "01" , "02" ... N de esa forma reemplazo la variable en pantalla que es un texto en definitiva con esto. y se ve bien... Gracias!

            Comentario


            • #7
              Re: Digitos de una variable en una resta.

              Me alegro, de todas maneras prueba con goto(x,y) para posicionar el cursor, pones dos o tres caracteres blancos y después el valor deseado. Tiene que funcionar.
              Un cordial saludo
              -Acalanto-

              Madrid - España

              Leer detalladamente las normas del foro es una buena forma de comenzar a participar en él. Te llevará unos pocos minutos y el colectivo de usuarios te lo agradecerá. <si no las has leído sigue este enlace>

              Comentario


              • #8
                Re: Digitos de una variable en una resta.

                Tal vez se podría intentar con

                Código:
                 // Colocando 3 espacios en blanco.
                strcpy(varPantalla,"   ");
                
                // O, si no, con 3 ceros:
                strcpy(varPantalla,"000");
                Me parece que es mejor la opción con los espacios, para que se borren los ceros, así en el nuevo resultado no aparecerán.

                Esto vendría a ser como "Borrar el display", lo que comúnmente conocíamos como cls (clear screen).

                Saludos.
                Última edición por javinet; 03-06-2015, 05:17 AM.
                Saludos.

                Comentario

                Trabajando...
                X