Autor Tema: como imprimir una variable y un texto en la misma linea, en arduino?  (Leído 17010 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
cordial saludo, requiero unir el nombre y la variable para que sea impresa en la misma linea, lo he intentado por todas partes y no lo logro.

Código: C
  1. float temperatura=20
  2.  
  3. void setup() {
  4.  // put your setup code here, to run once:
  5.  Serial.begin(9600);
  6.  
  7. }
  8.  
  9. void loop() {
  10.  
  11.    Serial.print("temperatura ");
  12.    Serial.println(temperatura);
  13. }

intente esto y mas..
Código: C
  1. ("temperatura: f%\n", Potsuma);

que estoy haciendo mal?.
Gracias de antemano.
« Última modificación: 11 de Abril de 2020, 21:31:22 por johenrod »
Si algo parece complicado... es por que esta mal explicado.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #1 en: 11 de Abril de 2020, 22:38:17 »
Código: C++
  1. String msg = "temperatura " + temperatura;
  2. Serail.print(msg);

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #2 en: 11 de Abril de 2020, 23:04:24 »
KILLERJC,, gracias por tu respuesta..

Código: C++
  1. String msg = "temperatura " + temperatura;
  2. Serail.print(msg);
como al compilar me dio error investigue y veo que es una librería, ya la descargue y la instale y sigue dando error.
hay que declarar algo al inicio del programa? lo pregunto porque nunca trabaje con esta librería.
saludos.....
Si algo parece complicado... es por que esta mal explicado.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #3 en: 12 de Abril de 2020, 03:01:20 »
String es de C++... Ahi veo que tuve un error y escribi mal Serial. Y me olvide que temperatura es un float, pense que era una string tambien:


Código: C
  1. String msg = "temperatura " + String(temperatura);

Pero veo que en otros foros intentan que se evite el uso de String... Una de las soluciones es el uso de dtostrf


Código: C++
  1. float val;
  2.   char buff[10];
  3.   String aenviar = "temperatura ";
  4.   dtostrf(temperatura, 4, 2, buff);
  5.   aenviar += buff;
  6.   Serial.println(aenviar);
« Última modificación: 12 de Abril de 2020, 03:17:40 por KILLERJC »

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #4 en: 12 de Abril de 2020, 11:41:13 »
KILLERJC
agradezco tu respuesta...
Código: [Seleccionar]
String msg = "temperatura " + String(temperatura);

Pero veo que en otros foros intentan que se evite el uso de String... Una de las soluciones es el uso de dtostrf


Código: C++
  float val;
  char buff[10];
  String aenviar = "temperatura ";
  dtostrf(temperatura, 4, 2, buff);
  aenviar += buff;
  Serial.println(aenviar);

Efectivamente con tus indicaciones logre imprimir con la primera.
El único problema es que no pude saber como delimito los decimales ya que salen muchos.

y con el otro método me perdí,  si de pronto puedes recomendarme un hilo o un tuto para aprender mas al respecto de las funciones print, string te agradecería mucho.
yo esto lo hago mas fácil en "CCS" pero me he dado cuenta que Arduino tiene sus limitaciones en varios aspectos.(o es diferente).
saludos cordiales y gracias por tu apoyo.
« Última modificación: 12 de Abril de 2020, 11:47:32 por johenrod »
Si algo parece complicado... es por que esta mal explicado.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #5 en: 12 de Abril de 2020, 14:47:12 »
Si el inicializador que vi en internet es correcto

Código: C++
  1. String::String(float value, unsigned char decimalPlaces) {
  2.     init();
  3.     char buf[33];
  4.     *this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf);
  5. }

entonces podria ser asi:

Código: C++
  1. String msg = "temperatura " + String(temperatura,2);

Citar
y con el otro método me perdí,  si de pronto puedes recomendarme un hilo o un tuto para aprender mas al respecto de las funciones print, string te agradecería mucho.
yo esto lo hago mas fácil en "CCS" pero me he dado cuenta que Arduino tiene sus limitaciones en varios aspectos.(o es diferente).

Tu problema es que te falta conocer el lenguaje C y su manejo, y respecto a los entornos: en CSS SI tenes limitaciones, y
Arduino tiene un IDE feo, pero podes programarlo en otro IDE, ademas usa C++, que es un lenguaje a pesar que parecido, distinto en muchos aspectos a C. Aunque no tan distintos para microcontroladores... En fin, tu problema es no saber C/C++ y no las herramientas/funciones.

Respecto al 2do codigo:

Código: C++
  1. char buff[10];       //Crea un array de 10 lugares donde va  a estar el resultado de la conversion de float a string
  2.   String aenviar = "temperatura ";  // inicializa la variable "aenviar" con el texto temperatura
  3.   dtostrf(temperatura, 4, 2, buff);   // Pasa el float (numero) a un string y lo guarda en buff
  4.   aenviar += buff;   // Como estamos en C y la clase String posee operator overloading, el + pasa a crear un string, que es la concatenacion de aenviar + buff, y lo guarda en el string a enviar.
  5.   Serial.println(aenviar);  //Imprime
 

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #6 en: 12 de Abril de 2020, 15:58:37 »
No entiendo el problema. A mí me funciona:

Código: C
  1. void setup() {
  2.    // put your setup code here, to run once:
  3.    Serial.begin(9600);
  4. }
  5.  
  6. void loop() {
  7.    float temperatura = 20;
  8.  
  9.    Serial.print("Temperatura=");
  10.    Serial.println(temperatura);
  11. }

 

* Captura.PNG
(22.23 kB, 778x521 - visto 9004 veces)

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #7 en: 12 de Abril de 2020, 16:06:16 »
Así salen 5 decimales:

Código: C
  1. void setup() {
  2.    // put your setup code here, to run once:
  3.    Serial.begin(9600);
  4. }
  5.  
  6. void loop() {
  7.    float temperatura = 20;
  8.  
  9.    Serial.print("Temperatura=");
  10.    Serial.println(temperatura, 5);
  11. }

 

* Captura.PNG
(23.28 kB, 778x521 - visto 8501 veces)


Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #8 en: 12 de Abril de 2020, 19:41:18 »
No entiendo el problema. A mí me funciona:

Código: C
  1. void setup() {
  2.    // put your setup code here, to run once:
  3.    Serial.begin(9600);
  4. }
  5.  
  6. void loop() {
  7.    float temperatura = 20;
  8.  
  9.    Serial.print("Temperatura=");
  10.    Serial.println(temperatura);
  11. }

  - Tienes que ingresar para ver archivos adjuntos -

cordial saludo, así efectivamente funciona, lo que tratamos es imprimir en una sola linea
Código: C
  1. String msg = "temperatura " + String(temperatura);

El problema es que aun no puedo indicarle cuantos decimales.. si 1,2,3 etc. lo he realizado como en los ejemplos pero no sale el valor de la variable.
En el otro ejemplo imprime pero lleva mas lineas que con las 2 necesarias.
Código: C
  1. char buff[10];       //Crea un array de 10 lugares donde va  a estar el resultado de la conversion de float a string
  2.   String aenviar = "temperatura ";  // inicializa la variable "aenviar" con el texto temperatura
  3.   dtostrf(temperatura, 4, 2, buff);   // Pasa el float (numero) a un string y lo guarda en buff
  4.   aenviar += buff;   // Como estamos en C y la clase String posee operator overloading, el + pasa a crear un string, que es la concatenacion de aenviar + buff, y lo guarda en el string a enviar.
  5.   Serial.println(aenviar);  //Imprime
« Última modificación: 12 de Abril de 2020, 19:44:55 por johenrod »
Si algo parece complicado... es por que esta mal explicado.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #9 en: 12 de Abril de 2020, 20:43:32 »
Citar
En el otro ejemplo imprime pero lleva mas lineas que con las 2 necesarias.

2 lineas del programa?, eso no hay problema, el tema es que salga bien por la UART.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #10 en: 13 de Abril de 2020, 04:03:32 »
Pero si a mí me sale bien, en una sola línea. Por eso he colgado la imagen de lo que me aparece por el monitor serie.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #11 en: 13 de Abril de 2020, 04:59:20 »
Menudo lío se está montando. Ahora quiere sacar el texto en la uart en una sola línea pero usando solo dos lineas de código. ¿Por que solo dos lineas de código? Es que no tiene sentido.

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #12 en: 13 de Abril de 2020, 08:01:58 »
Cordial saludo...
Menudo lío se está montando. Ahora quiere sacar el texto en la uart en una sola línea pero usando solo dos lineas de código. ¿Por que solo dos lineas de código? Es que no tiene sentido.
en realidad lo que buscaba era imprimir en Arduino el texto y la variable en una sola linea.
Código: C
  1. Serial.print("temperatura ");
  2.    Serial.println(temperatura);

Pero, "sale mas costoso el remedio que la enfermedad", pues trataba de hacer algo como en "CCS"
Código: C
  1. printf ("voltaje es= %1.2f\n",temp); // imprimo %1.2f 1 entero, 2 decimales flotantes
veo entonces que es mejor imprimir las 2 lineas iniciales
Código: [Seleccionar]
Serial.print("temperatura ");
   Serial.println(temperatura);
Gracias a todos por la ayuda que me prestaron.

Si algo parece complicado... es por que esta mal explicado.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #13 en: 13 de Abril de 2020, 08:56:13 »
Ahora entiendo la pregunta. Lo que quieres es poder utilizar la instrucción printf.
En principio no es recomendable usar printf en microcontroladores porque el código ocupa mucho espacio.
Es posible usar printf así:

Código: C
  1. // Function that printf and related will use to print
  2. int serial_putchar(char c, FILE* f) {
  3.    if (c == '\n') serial_putchar('\r', f);
  4.    return Serial.write(c) == 1 ? 0 : 1;
  5. }
  6.  
  7. FILE serial_stdout;
  8.  
  9. void setup() {
  10.    Serial.begin(9200);
  11.  
  12.    // Set up stdout
  13.    fdev_setup_stream(&serial_stdout, serial_putchar, NULL, _FDEV_SETUP_WRITE);
  14.    stdout = &serial_stdout;
  15. }
  16.  
  17. void loop () {
  18.    int n = 18;
  19.    printf("Pi number = %6d\n", n);
  20. }

Pero la orden printf no acepta números en coma flotante, tienes que utilizar dtostrf. De nuevo es por razones de optimización de espacio.

Un saludo.

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:como imprimir una variable y un texto en la misma linea, en arduino?
« Respuesta #14 en: 13 de Abril de 2020, 11:52:11 »
queda muy claro, mil gracias.
Si algo parece complicado... es por que esta mal explicado.


 

anything