Imprimir siempre 4 dígitos al leer una entrada analógica [SOLUCIONADO]

Hola, asta ahora solo había programado microchip mediante proton y ahora estoy con mis primeros pasos con la placa ChipKit uno32 de microchip. Esta placa se programa teóricamente con el mismo lenguaje que arduino y estoy teniendo un problema que no doy resuelto por ningún lado. Digamos que quiero imprimir en un LCD el valor de una entrada analógica pero quiero que siempre me imprima 4 dígitos, me explico, para el valor máximo me dará una salida de 1023 y para el mínimo 0000. Esto en proton se conseguía con el siguiente comando:

Print At 2,1," ",Dec4 (var)

Añadiendo el 4 al comando Dec siempre imprime 4 dígitos evitando que los números se muevan de lugar en el LCD cuando sus dígitos son menores de 4,

En arduino no soy capaz y no encuentro en la documentación ninguna forma de hacerlo, a ver si alguien me sabe dar solución a este problema. Gracias de antemano

No sé si hay alguna instrucción equivalente a la que indicas, tal vez los conocedores de C sepan si hay alguna. Si no siempre puedes establecer un pequeño código que identifique si el número que quieres sacar en el LCD tiene 1, 2, 3 ó 4 cifras (si es <10, <100, <1000 y <10000 respectivamente) e imprimir primero el número de ceros necesarios antes de imprimir el número en la posición que corresponda.

Si la pantalla permite una cadena como salida, puedes primero construirla en un buffer de memoria con sprintf(buffer, formato, variables): char cadena[5]; sprintf(cadena,"%04d",var);

Antes de nada gracias por las respuestas. He puestos el ejemplo del LCD pues me parecía una forma fácil de explicar mi problema, pero no es así, lo que tengo son 8 señales. 4 analógicas y 4 digitales las cuales saco por puerto serie en un string y las leo mediante Labview. Las digitales son 0 o 1 así que no suponen problema el problema viene con las analógicas que como he dicho varia el numero de caracteres según su valor. pongo un ejemplo, si saco por puerto serie el siguiente dato: out00014321555501230011 Si tengo en cuenta que las analógicas siempre son de 4 dígitos al recibir la palabra out por puerto serie los siguentes datos que me entran son: Señal analogica 1 = 0001 Señal analogica 2 =4321 Señal analogica 3 = 5555 Señal analogica 4 = 0123

Señal digital 1 = 0 Señal digital 2 = 0 Señal digital 3 = 1 Señal digital 4 = 1

El problema es que si la señal analogia 1 en vez de mandar el valor 0001 me manda solo el numero 1 el programa la leería como 1432 cojiendo los valores de la señal analógica 2 y leyendo mal las otras variable.

Lo siento por el tostón, pero no me puedo creer que algo tan sencillo en Proton me esté dando tantos problemas en arduino =( =( =( =( =( =( =(.

Pues creo que las dos soluciones que te hemos dado te sirven igualmente.

char buffer[100]; // Con 100 caracteres debe haber más que suficiente para almacenar la cadena a enviar
sprintf(buffer,"%04d%04d%04d%04d%d%d%d%d",analog1,analog2,analog3,analog4,digital1,digital2,digital3,digital4);
Serial.println(buffer);

Tampoco es tan complicado en arduino, hombre ;). Sencillamente es distinto a Proton.

Pues creo que las dos soluciones que te hemos dado te sirven igualmente.

Si, no digo que no funcionen, pero me parecía complicar demasiado un código tan simple, para eso seria mas fácil multiplicar las señales analógicas por 10000 y después descartar simplemente el 1 en la lectura. Lo que buscaba era saber si habría una instrucción en arduino para hacer esto directamente, al igual que la hay en Basic o Proton.

Code: char buffer[100]; // Con 100 caracteres debe haber más que suficiente para almacenar la cadena a enviar sprintf(buffer,"%04d%04d%04d%04d%d%d%d%d",analog1,analog2,analog3,analog4,digital1,digital2,digital3,digital4); Serial.println(buffer);

Tampoco es tan complicado en arduino, hombre smiley-wink. Sencillamente es distinto a Proton.

No había entendido tu mensaje anterior, ahora veo lo que quieres decir con el comando sprintf, lo que haces poniendo %04d es mandar guardar 4 dígitos en el buffer no?, si lo he entendido bien es lo que buscaba. Voy a probarlo ahora mismo

Es perfecto muchos gracias es lo que buscaba, pego el programa por si a alguien le sirve de ayuda.
Gracias nuevamente a los dos por responder tan rapido :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

void setup() 
  {
  Serial.begin(9600);
  }

void loop() 
  {
  int Ana0 = analogRead(A0);
  int Ana1 = analogRead(A1);
  int Ana2 = analogRead(A2);
  int Ana3 = analogRead(A3);
  
  int Dig0 = digitalRead (3);
  int Dig1 = digitalRead (4);
  int Dig2 = digitalRead (5);
  int Dig3 = digitalRead (6);
  
  char buffer [100];
  sprintf(buffer,"%04d%04d%04d%04d%d%d%d%d",Ana0,Ana1,Ana2,Ana3,Dig0,Dig1,Dig2,Dig3);
  Serial.println(buffer);
  delay (1000);
  }

Me alegro de haberte servido de ayuda. Edita el asunto del hilo, anteponiendo "[SOLUCIONADO]" para que resulte útil a las futuras visitas. Saludos.