Me redondea y recorta mis decimales

Hola a ver si logro que me saques del apuro. Cuando recibimos las Coordenadas de un GPS NEO-6M

recibimos por ejemplo
Latitud -9999.99999 y Longitud -09999.99999

Mi intensión es capturar las coordenadas con un ATtiny85

Pero no logro que se tomen los decimales correctamente ya que me muestra otros valores decimales y en la conversión me los recorta a 2 decimales.

Mi problema es que los valores deben ser exactos; ya que si se alteran me dará la ubicación incorrecta.

Este es el algoritmo que hace mis conversiones:

#include <SoftwareSerial.h>

//float numFloat=34.6;
float numFloat=-5330.20132; // Coordenada GPS
String strFloat;
char charFloat[11];

void setup(){
     Serial.begin(9600);
}

void loop(){
     strFloat="";
     Serial.print("Float: "); Serial.println(numFloat,5);
     strFloat+=numFloat;

     Serial.println("Float con String: "+strFloat);

     Serial.println("Vector: ");
     strFloat.toCharArray(charFloat,11);
     for (int i=0; i<11; i++){
         Serial.println(charFloat[i]);
     }
     delay(2500);
}

Muchas Gracias y cordial saludo

Floating-point numbers can be as large as 3.4028235E+38 and as low as -3.4028235E+38. They are stored as 32 bits (4 bytes) of information.

Si ves la parte decimal cuantos digitos cuentas? 7
Entonces pretender imprimir 11 es una locura.
Uno entonces tendería a pensar, bueno uso double y tendré doble mantisa pero eso obligaría a usar 8 bytes y no es posible amenos que tengas un DUE.
Double precision floating point number. On the Uno and other ATMEGA based boards, this occupies 4 bytes. That is, the double implementation is exactly the same as the float, with no gain in precision.
On the Arduino Due, doubles have 8-byte (64 bit) precision.

En resumen a menos que uses una librería especial, y que quepa en el ATtiny estas limitado en lo que podes conseguir.

Pero ahora mirando tu código tu haces una conversión a String y tal vez ahi haya un problema.
Lo analizo y luego comparto mi respuesta.

Hola Surbyte. Como siempre 1KGracias por estar del otro lado.

Mirá este nuevo algoritmo lo hice de cero con un NANO, para luego adaptarlo al ATtiny85.

#include <SoftwareSerial.h>

String Coordenada[11];

void setup(){
     Serial.begin(9600);
     Serial.println("Valor original : -3531.12731");
     
     double a=-3531.12731;
     double z=a+a;
     
     if (a<0){a=a*-1;}
     Serial.println(a,5);
     
     String Entero=String(int(a));
     Serial.println(Entero);
          
     int b=((a-(int(a)))*100000);
     Serial.println(b);
     String Decimal=String(b);

     String Coord="-"+Entero+"."+Decimal;
     Serial.println(Coord);
     
     for (int i=0; i<11; i++){
         Serial.println(Coord.charAt(i));
     }
     Serial.println(z,6);
}
void loop(){}

Con este mejoro "espacio ocupado" excelente para el ATtiny85; pero solo me resta resolver la exactitud de mis decimales... siento que estoy muy cerca de resolverlo.

Este lo siento más concreto y robusto. me muestra de a un caracter "justo" para mostrarlo en el LCD del ATtiny85.

El ATtiny85 es una maravilla!!! todo este lío es por las librerías del lcd1602 que me obligan a mostrar de a un caracter x vez.

Ya le he puesto y probado con EXCELENTE respuesta un Mod. BluetoothHC05, Display LCD, y ahora el GPS. Imaginate lo Hermoso que es trabajar con 4 pines "justo lo necesario" para este proyecto.

Querido lector les recomiendo salir de la "zona de confort" que nos dan el NANO, UNO, MEGA y entrar en este mundo tan pequeño... te dispara la adrenalina y te enseña lo fantástico de un pequeño GRAN ATtiny85.

Una vez que lo veas; espero que coincidas conmigo. Mirá esta propuesta.

En este momento tengo mi ATtiny85 funcionando con el Bth y el lcd. solo me faltaba el GPS.

Ahora bien. vos me dirás ¿para que el bluetooth? bien para un relevamiento "topografico" donde estas en un camino Rural donde jamás has estado antes. este proyecto me permite ver DONDE ESTUVE.
Al ingresar las coordenadas en el Google Heart logro ver los caminos alternativos para llegar al mismo sitio que he estado; para reconocimiento del lugar. Bien esto es para que me sirve este proyecto. Que mi versión anterior fue con un UNO, la version II la hice con un NANO y ahora con el ATtiny85.
No necesito explicarte como se vá achicando mi GPS ¿no? es una verdadera maravilla.

Volviendo al punto. No usar librerías es una de las claves (por su reducida capacidad). Entonces pensé que si usaba mi celular de pantalla con el bluetooth como via de comunicación entre el ATtiny85 y mi celular ya no iba a necesitar del display.
Pero me salió tan genial su respuesta que me tiré de cabeza y le agregué el display para tener la "alternativa" de usarlo con Celular como Display o un Display propiamente dicho. Al pretender usar el Display también. Fue ahí donde seme complicó todo.

Uso un "unico canal" SoftwareSerial miCanal(3,4); donde lo comparto tanto para el Bluetooth como para el GPS. Y me funciona de maravilla.
Recibo por el mismo canal ya sea desde el bluetooth o del GPS y transmito "solamente" hacia el bluetooth.

Dicho todo esto. Fijate Surbyte. Como NO puedo usar la libreria TinyGPS.h leo miCanal.read() de a un caracter por vez y armo mi lectura. Hasta acá todo funciona barbaro.

Y en este hermosa mañana de Domingo creo que con esta último algoritmo que hice anoche + leer de a un caracter "creo", "creo". "CREO" ajaja que ya lo tendría todo resuelto.

Si no te he mareado hasta acá... ¿como lo vez?

No me has mareado, y entiendo por donde va la idea.

Surbyte

Como el eslogan de Kohinoor "poderoso el chiquitin". jaja


Así comenzó todo... En un pote de Cif puse un Arduino UNO, Luego en una jabonera lo hice con un Arduino NANO v3. Este se podrá alimentar a un encendedor del auto, con bateria recargable... Espero contagiarte he inyectarte la ganas suficientes para que termines ese proyecto que abandonaste en un cajón; pensando que NO IBAS A PODER. te deseo lo mejor querido lector.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.