Estoy en un proyecto que consiste en hacer una calculadora que utilice LCD, la cual tiene que mostrar el resultado de una operación aritmética, y si el resultado de la operación (suma, resta, multiplicación o división) supera los 16 dígitos (número de columnas de la LCD) lance un mensaje de "error" en la LCD. Pero para ello necesito primero convertir la variable "total" (que es donde se almacena el resultado) en string para poder hacer la validación con un length(), algo así:
if (total.length() > 16) {
lcd.clear();
lcd.setCursor(11, 0);
lcd.print("ERROR"); //si el total de la operación supera los 16 dígitos que lance un mensaje de "error"
delay(5000);
} else {
lcd.clear();
lcd.setCursor(15, 0);
lcd.autoscroll();
lcd.print(total); //aquí se muestra el resultado de la operación
lcd.noAutoscroll();
}
¿Alguien tiene idea de como o alguna solución alternativa?
Aclaremos conceptos primero: total es una variable tipo char, int, long, float?
Como desconozco la respuesta la conclusión evidente es ver cuanto es el valor máximo de cada tipo:
byte: 0..255
int: 32767 a -32768
long: -2147483648 a 2147483647
float: 3.4028235E +38 a -3.4028235E +38
Cómo vemos para un byte necesitamos un total de 3 digitos. Si fuera un char, seria un valor con signo, asi que necesitaremos 3 digitos. Para un int, necesitamos 6 (el signo). Para un long necesitamos 11 digitos.
Como ves no te van a ocupar mas de una linea de display en ninguno de los casos anteriores así que directamete utilizando lcd.print(total) nunca llegarás a tener ese problema.
Aun así si quieres usar una cadena puedes usar la función sprintf
char cadena[16];
sprintf(cadena, "%d", valor);
Creo que ahora es cuando me preguntarás y porque no has hablado de float. Además de que el arduino carece de unidad de punto flotante y la implementación se hace por software (por lo cual te recomendaran mil veces no usar float) tiene el problema añadido de que muchas funciones no trabajan bien con este tipo de datos, incluido sprintf. Y creeme cuando te digo que si te das una vuelta completa por el foro, casi que no encontraras soluciones fiables, o al menos fáciles.
Personalmente no creo debas tener muchos problemas a la hora de usar lcd.print para mostrar los datos. En el caso de float cuando, se desborde o te haga una operacion incorrecta esta función te mostrará un texto escualido "ovf", "inf".
Por cierto, una ultima recomendación: en el foro si quieres introducir código utiliza el tag "code".
victorjam:
Como desconozco la respuesta la conclusión evidente es ver cuanto es el valor máximo de cada tipo:
byte: 0..255
int: 32767 a -32768
long: -2147483648 a 2147483647
float: 3.4028235E +38 a -3.4028235E +38
A ver si me captas: 30000 * 2 según nuestro razonamiento matemático, es 60000, ¿correcto?
Habiendo reconocido los límites, adivina el resultado de esta operación si se hace sobre un int...