Go Down

Topic: Separar números por decenas, centenas, millares...etc (Read 11607 times) previous topic - next topic

ehrja

Jejeje si tienes razón me da mucha pena ese tipo de situaciones.

Y no es que te niegue la ayuda pero a veces la necesidad enseña mas, considero que toda la información esta ya escrita en los comentarios que anteceden a estos últimos y si bien algo no esta detallado puedes buscar referencias en google o en las referencias de Arduino.

Como dije antes, la necesidad es la madre de los inventos, si tienes necesidad de que quede bien vas a concretar tu trabajo.

Estas tan cerca! y lo único que puedo decir: "continua, ya estas cerca y veras que se siente una gran satisfacción después de saltar ese gran obstáculo"
Hola buenos días!

AlexPocholo

La verdad es que si, estoy un poco saturado y liado con los codigos jajajajaja. Voy a ir probando todo lo que pueda y modificando a ver si doy con ello y os informare. Muchas gracias por la ayuda!

AlexPocholo

Si te tomas un poco de tiempo para leer el código que te puse, entenderás que tiene un "emulador" que cuenta puntos, en realidad suma puntos de 100 a 800 en un random, lo puse para emular tu código que cuenta puntos tendrías leerlo y adaptarlo al tuyo.

A mi me funciona bien la separación, el único detalle que tiene es que cuando el contador esta por sobre 1,000,000 (un millón) la parte de los miles se corre dos posiciones a la izquierda cuando es < 10 y una cuando es < 100 , algo que se ve mal pero cuando el numero llega a 1,100,000 recupera su forma.

Se me ocurre una forma de solucionarlo pero te lo dejare a ti si quieres seguir con mi código, te doy una pista, cuando el número sea mayor que 1,000,000 imprimir los millones con dos ceros antes cuando sean menos que 9 y un cero cuando sean menos que 100.

Vale voy a continuar con este codigo y creo que sera el definitivo. Ahora me va genial, pero la cosa es esa que a veces me pone por ejemplo "1,40,0000" o "1,5,000000" pero como dices tu, al subir a 100 se quita y se pone bien. Estoy calentandome la cabeza para solucionarlo con la pista que me has dado y a ver si lo logro, e intentado algo, pero no ha funcionado. Muchas gracias

ehrja

Si ya lo dije, el porque pasa y como resolverlo, esta claro, peor lo que no esta claro , al menos para ti, es porque se ven mas ceros al final...

Te di una pista en el comentario #26 para resolver eso.

Pasa porque millones, miles y centenas son números enteros y no tienen ceros a la izquierda, por lo tanto se corren los miles y todo después de ello. Se ven tantos ceros porque la pantalla no se limpia y por eso se ven mas ceros.

si pones lcd.clear(); antes de lcd.setCursor(##,##) te daras cuenta que los números que aparecen son los que deben ser.
Hola buenos días!

AlexPocholo

Si ya lo dije, el porque pasa y como resolverlo, esta claro, peor lo que no esta claro , al menos para ti, es porque se ven mas ceros al final...

Te di una pista en el comentario #26 para resolver eso.

Pasa porque millones, miles y centenas son números enteros y no tienen ceros a la izquierda, por lo tanto se corren los miles y todo después de ello. Se ven tantos ceros porque la pantalla no se limpia y por eso se ven mas ceros.

si pones lcd.clear(); antes de lcd.setCursor(##,##) te daras cuenta que los números que aparecen son los que deben ser.

Buenas, solucione el problema ese con lcd.clear(); ahora me va genia. Solo hay un problema y es que cuando los miles son menos de 100.000 al estar los puntos en los millones me lo interpreta asi "1,10,000" y cuando son menor de 10.000 asi "1,5,000" he intentando solucionarle intentando ponerle dos ceros cuando sea menos de 10.000 y un cero cuando sea menos de 100.000. Pero me salia una liada gorda en el marcador se ceros... Luego subire el codigo que hice y una foto de lo que me pasa que ahora no puedo. Pero voy genial, si no lo puedo solucionar lo dejaré así aunque voy a luchar por conseguirlo.

ehrja


//en cuanto a clear()

Te advierto que no es necesario el lcd.clear(), solo lo mencione para que vieras que se corren los ceros y la pantalla mantiene los datos todo el tiempo, para cambiarlos hay que sobre escribir en la posición que es lo que se hace, y si se quiere borrar tenemos que usar el lcd.clear() pero si se abusa de el la pantalla parpadeara demasiado, un efecto que se ve feo y que ademas es redundante(innecesario ya que la mayoria de dígitos son los mismos).

Como solo se actualiza un renglón se vale sobre escribir cada vez y no se ve mal porque solo se nota en los últimos dígitos del número.

//EL FIX

Por otro lado si se ante ponen ceros según el caso ("00" si miles < 10, "0" si miles < 100) no debería de correrse los dígitos y no necesitas el clear, si lo solucionas quita el clear para que no te parpadee demasiado.

Yo tengo listo el código, te lo paso o quieres que te de mas pistas.  
Se trata comparaciones compuestas



Hola buenos días!

AlexPocholo

//en cuanto a clear()

Te advierto que no es necesario el lcd.clear(), solo lo mencione para que vieras que se corren los ceros y la pantalla mantiene los datos todo el tiempo, para cambiarlos hay que sobre escribir en la posición que es lo que se hace, y si se quiere borrar tenemos que usar el lcd.clear() pero si se abusa de el la pantalla parpadeara demasiado, un efecto que se ve feo y que ademas es redundante(innecesario ya que la mayoria de dígitos son los mismos).

Como solo se actualiza un renglón se vale sobre escribir cada vez y no se ve mal porque solo se nota en los últimos dígitos del número.

//EL FIX

Por otro lado si se ante ponen ceros según el caso ("00" si miles < 10, "0" si miles < 100) no debería de correrse los dígitos y no necesitas el clear, si lo solucionas quita el clear para que no te parpadee demasiado.

Yo tengo listo el código, te lo paso o quieres que te de mas pistas. 
Se trata comparaciones compuestas




Perdona por no responderte antes. No he conseguido ponerlo como deseo... Si pudieras pasar el código con lo que me falta te lo agradecería mucho, porque estoy ya un poco loco de tanta vuelta jajaja

ehrja

Hola

Ya me había olvidado de tu caso, pensé que ya lo tenias solucionado...

En fin déjame proponerte algo, te lo paso pero que te parece si pones unas fotos de tu maquina ya terminada o como la tengas a cambio del código, solo por curiosidad y para que valga la pena el esfuerzo y el tiempo de los que te intentamos ayudar por aquí.

Ademas Surbyte me dijo que tenia ganas de verla maquina... jeje


En fin la cuestión es que no andaba tan mal en el comentario #26
Code: [Select]
    if (puntos < 1000000000 && puntos > 999999)  //imprime # < 1000000000 y > 1000000
    {
      lcd.print(millones(puntos)), coma;
      int miles = centenas(miles(puntos));
      if (miles<10 && miles >= 0 ) lcd.print("00"), lcd.print(miles);
      if (miles<100 && miles >=10 ) lcd.print("0"), lcd.print(miles);
      if (miles>=100) lcd.print(miles);
      coma, lcd.print(centenas(puntos));
    }
 

    if (puntos > 1000000000000) //mucho tiempo para llegar qui.
      lcd.clear(), lcd.print("     YA GANASTE ");
}


Bueno amigo esperamos las fotos de tu proyecto, ojala lo tengas bien presentado como debe de ser.
saludos y hasta otra.
Hola buenos días!

dabidoom

Hola amigos del Foro

Muchas gracias antes de todo por la ayuda que se esta prestando en este hilo al amigo "AlexPocholo", el es quien se encarga de la parte eléctrica y de programar el arduino, y yo me encargo del resto de la maquina, desde la idea inicial, construcción, diseño gráfico y un largo etc, ya que crear de 0, totalmente a mano y recreando piezas reales a nivel casero se lleva su tiempo  si pero aquí esta...

METALHEAD PINBALL







La maquina es mas pequeña que una de verdad y las piezas son caseras y recreadas con madera, como por ejemplo los FLIPPERS o "palas" si así lo entienden mejor jeje





Esto es todo asta ahora si os gusta el proyecto iremos subiendo algunas fotos mas para que vean como ensamblamos todo lo eléctrico dentro ya del mueble.

Un saludo y nuevamente gracias
Tienen unas partidas aseguradas desde ya! :D

surbyte

Eso te lo dijo Noter en su primer respuesta...
Ahora vas y vienes con los códigos y de nuevo vuelves a cambiar, cuando yo creía que seguirías el código de ehrja.

A ver si lo entiendes: Lo unico que debes hacer es, establecer que secuencias de números esta fuera del criterio que buscas y para esa secuencia crea una condición que la contemple.



ehrja

Pues la maquina se ve genial.
Suerte.

Ah no seria mala idea, que si van a continuar con el trabajo lo documenten el el subforo de proyectos con el titulo "maquina de pinball minuatura 'metalera' con arduino", por sugerirles uno.

Las fotos están geniales y la verdad les va quedando bien, me han sorprendido.
buena suerte.
Hola buenos días!

AlexPocholo

Hola

Ya me había olvidado de tu caso, pensé que ya lo tenias solucionado...

En fin déjame proponerte algo, te lo paso pero que te parece si pones unas fotos de tu maquina ya terminada o como la tengas a cambio del código, solo por curiosidad y para que valga la pena el esfuerzo y el tiempo de los que te intentamos ayudar por aquí.

Ademas Surbyte me dijo que tenia ganas de verla maquina... jeje


En fin la cuestión es que no andaba tan mal en el comentario #26
Code: [Select]
    if (puntos < 1000000000 && puntos > 999999)  //imprime # < 1000000000 y > 1000000
    {
      lcd.print(millones(puntos)), coma;
      int miles = centenas(miles(puntos));
      if (miles<10 && miles >= 0 ) lcd.print("00"), lcd.print(miles);
      if (miles<100 && miles >=10 ) lcd.print("0"), lcd.print(miles);
      if (miles>=100) lcd.print(miles);
      coma, lcd.print(centenas(puntos));
    }
 

    if (puntos > 1000000000000) //mucho tiempo para llegar qui.
      lcd.clear(), lcd.print("     YA GANASTE ");
}


Bueno amigo esperamos las fotos de tu proyecto, ojala lo tengas bien presentado como debe de ser.
saludos y hasta otra.
Buenas, perdón por no haber contestado antes. Tenia el ordenador roto... lo siento.

He solucionado ya todo el problema que tenia. Le he dado vueltas a ese código y no he conseguido nada... Pero muchísimas gracias por las ayudas y por portaros.

Este ha sido el código que he usado:

[/code]
 lcd.setCursor(0, 1);                         //pasamos a la linea 2
   
    if (puntos < 999) lcd.print(puntos);         //imprime # menores a 1000
   
    if (puntos < 1000000 && puntos > 999)        //imprime # < 1000000 y > 1000
      lcd.print(miles(puntos)), coma, lcd.print("000");
   
    if (puntos < 1000000000 && puntos > 999999){  //imprime # < 1000000000 y > 1000000
     
     
     
    if (centenas(miles(puntos)) < 100){
     
     lcd.setCursor(0,1);
    lcd.print(millones(puntos)), coma, lcd.print("0"), lcd.print(centenas(miles(puntos))), coma, lcd.print("000");
    lcd.setCursor(0,1);
    }
   
     if (centenas(miles(puntos)) > 99){
     
     lcd.print(millones(puntos)), coma, lcd.print(centenas(miles(puntos))), coma, lcd.print("000");
    }
    }
[/code]

ABRIRE UN HILO CUANDO EL PROYECTO ESTE TERMINADO PARA ENSEÑARLO. MUCHAS GRACIAS POR TODO!!

AlexPocholo

Hola

Ya me había olvidado de tu caso, pensé que ya lo tenias solucionado...

En fin déjame proponerte algo, te lo paso pero que te parece si pones unas fotos de tu maquina ya terminada o como la tengas a cambio del código, solo por curiosidad y para que valga la pena el esfuerzo y el tiempo de los que te intentamos ayudar por aquí.

Ademas Surbyte me dijo que tenia ganas de verla maquina... jeje


En fin la cuestión es que no andaba tan mal en el comentario #26
Code: [Select]
   if (puntos < 1000000000 && puntos > 999999)  //imprime # < 1000000000 y > 1000000
    {
      lcd.print(millones(puntos)), coma;
      int miles = centenas(miles(puntos));
      if (miles<10 && miles >= 0 ) lcd.print("00"), lcd.print(miles);
      if (miles<100 && miles >=10 ) lcd.print("0"), lcd.print(miles);
      if (miles>=100) lcd.print(miles);
      coma, lcd.print(centenas(puntos));
    }
  

    if (puntos > 1000000000000) //mucho tiempo para llegar qui.
      lcd.clear(), lcd.print("     YA GANASTE ");
}


Bueno amigo esperamos las fotos de tu proyecto, ojala lo tengas bien presentado como debe de ser.
saludos y hasta otra.
Buenas, perdón por no haber contestado antes. Tenia el ordenador roto... lo siento.

He solucionado ya todo el problema que tenia. Le he dado vueltas a ese código y no he conseguido nada... Pero muchísimas gracias por las ayudas y por portaros.

Este ha sido el código que he usado:

Code: [Select]

lcd.setCursor(0, 1);                         //pasamos a la linea 2
   
   if (puntos < 999) lcd.print(puntos);         //imprime # menores a 1000
   
   if (puntos < 1000000 && puntos > 999)        //imprime # < 1000000 y > 1000
     lcd.print(miles(puntos)), coma, lcd.print("000");
   
   if (puntos < 1000000000 && puntos > 999999){  //imprime # < 1000000000 y > 1000000
     
     
   
   if (centenas(miles(puntos)) < 100){
   
    lcd.setCursor(0,1);
   lcd.print(millones(puntos)), coma, lcd.print("0"), lcd.print(centenas(miles(puntos))), coma, lcd.print("000");
   lcd.setCursor(0,1);
   }
   
    if (centenas(miles(puntos)) > 99){
     
    lcd.print(millones(puntos)), coma, lcd.print(centenas(miles(puntos))), coma, lcd.print("000");
   }
   }


ABRIRE UN HILO CUANDO EL PROYECTO ESTE TERMINADO PARA ENSEÑARLO. MUCHAS GRACIAS POR TODO!!

Go Up