¿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»