Imprimir LCD de cadena y entero

¿Cómo imprimo una cadena y un entero en una LCD? Esto es lo que he probado:

int number = 2; int result = (number + number); lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC); 

Y el resultado es un error. Cuando intento:

lcd.print(number + "look"); 

o

lcd.print("1234 " + number); 

Entonces el resultado en la pantalla LCD es ¡»34″, ya que eliminó los dos primeros números!

Quiero que se imprima:

1234 2

¡Por favor, ayuda! ¡Gracias!

Responder

El método lcd.print() toma una cadena o un número como un argumento, pero no ambos a la vez. El uso del operador + para la concatenación no es nativo de las cadenas C. Las cadenas de C se almacenan básicamente como punteros al primer carácter de la cadena. Entonces, cuando probaste lcd.print("1234 " + number) y obtuviste "34 ", lo más probable es que avanzaste el puntero, apuntando al primer carácter de "1234 " (es decir, «1») por number (es decir, 2), lo que hace que el puntero apunte al 3er carácter en la cadena y, por lo tanto, hace que lcd.print() muestre "34 ". Para imprimir algo que contenga tanto cadenas como números enteros, la forma más sencilla es convertir cada pieza en una cadena Arduino y luego concatenarlas, usando el operador + como hiciste antes.

 lcd.print(String("1234 ") + String(number)); lcd.print(String(number) + String(" plus ") + String(number) + String(" equals ") + String(result)); 

Estos son algunos ejemplos. También puedes crear un búfer char suficientemente grande y usar sprintf() de stdio.h para compilar una cadena formada por números enteros y cadenas. Busque un libro de texto sobre C / C ++ para obtener más detalles.

Respuesta

Tengo el mismo problema e imprimí la cadena y el número entero en la misma línea moviendo el cursor así:

 lcd.setCursor(0, 0); <----------Column 0 , Line 1 lcd.print("This code failed"); lcd.setCursor(0, 1); <----------Column 0 , Line 2 lcd.print("Error Code = "); lcd.setCursor(13, 1); <-change the cursor for the INT. Column 13 , Line 2 lcd.print(int); 

Comentarios

  • Qué sucede si un primer código de error es, digamos, 1234, luego otro es 57 … la pantalla mostraría " 5734 " ¿verdad?

Respuesta

¿Qué hay de malo en esto?

lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC); 

Es el número de parámetros y la suposición de que plus concatenará cadenas literales.

lcd.print("1234 " + number); 

Esto da «34» cuando el número es 2 . ¿Por qué? Esto se debe a que es el resultado de agregar 2 al puntero literal de cadena, es decir, la cadena que comienza en el carácter «3». En su lugar, utilice sentencias de impresión independientes:

lcd.print("1234 "); lcd.print(number); 

No utilice String para concatenar cadenas. Eso es un desperdicio de SRAM, procesamiento y tiene un riesgo de fragmentación del montón. Simplemente una mala idea en sistemas integrados de pequeña escala como AVR.

Para comprender estos errores, debe volver atrás y leer sobre cadenas y literales de cadena en C / C ++ (en comparación con Java :).

¡Salud!

Respuesta

int a=0; float b=10.01; char str[16]; sprintf(str,"a=%d, b=%.2f, c=%d", a, b, 2); // use sprintf() to compose the string str lcd.print(str); 

La salida será «a = 0, b = 10.01, c = 2»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *