Hola, me gustaria abrir este post para analizar los metodos de pasar de un tipo de variable a otro.
Estoy teniendo muchos problemas con mi pantalla LCD ya que cuando le envio datos para mostrar si no tengo las variables perfectamente definidas y segun espera la libreria, me cuelga el programa.
Le he metido muchiiiiiisimas horas y algo he avanzado, a ver si entre todos me ayudais a terminar de pulirlo porque sigue dandome problemas
El titulo del post no menciona nada de LCD porque en principio este post deberia servir para cualquier caso.
Al tema...
La libreria de mi pantalla LCD I2C realiza esta función.
// **************************************************************
// sends string
// **************************************************************
void BV4618_I::puts(char *s)
{
char *sp=s;
Wire.beginTransmission(_i2adr);
// send *s as bytes of date
while(*sp)
Wire.send(*(sp++));
Wire.endTransmission();
}
Esto funciona sin problemas ya que es un simple string y es el ejemplo mas sencillo.
di.puts("Hello World");
A partir de ahi empiezan los problemas cuando la sentencia que le envio no es como quiere.
Esto funciona, no entiendo porque ya que si currentMillis es 12345 el resultado de la división es 12.345 que es un float en lugar de un long ????¿?¿?¿?
unsigned long currentMillis;
char time_str[4]; // Define as a string (4 bytes)
currentMillis = millis();
di.puts(ltoa (currentMillis/1000, time_str, 10));
Esto funciona y tampoco entiendo porque, ya que apparentPower es un double y no un long para usar ltoa
double apparentPower;
char time_str[4]; // Define as a string (4 bytes)
...
di.rowcol(2,1);
di.puts(ltoa(apparentPower, time_str, 10)); di.puts(" Watts ");
Esto lo aprendi ayer y me ha ayudado mucho ya que esto me funciona en un programa por separado donde solo haya este codigo.
char lcd_data[70];
di.rowcol(1,1);
float horas = time/3600000;
long segminuto = ((time - (int)horas*3600000));
int minutos = (segminuto / 60000);
int segundos = ((segminuto - minutos*60000) / 1000);
// coge todos los segundos y le resta los segundos correspondientes a las horas de "horas"
// de esta resta nos quedan los segundos sin contar las horas (es decir los segundos hacia
// la proxima hora completa
sprintf(lcd_data,"Time: %0d:%02d:%02d",(int)horas,minutos,segundos);
di.puts(lcd_data);
En cambio ahora quiero hacer eso mismo en un proyecto y se me bloquea el programa. Si descomento estas lineas el programa entero funciona perfecto.
char uptime_data[4];
float horas;
horas = ((float)currentMillis/3600000.0);
long minutos;
minutos = currentMillis - (int)horas*3600000;
int horass;
horass = (int)horas;
sprintf(uptime_data,"T: %0d ",horass);
di.puts(uptime_data);
He leido mucho de tipos de variables pero no termino de saber que pasa.
Se que hay mucho aquí, pero si alguien tiene alguna sugerencia igual puede ayudarme.
gracias