Go Down

Topic: error de conversion (Read 653 times) previous topic - next topic

mamumo

Sep 26, 2012, 12:29 pm Last Edit: Sep 26, 2012, 01:24 pm by mamumo Reason: 1
Hola!  os cuento mi problema a ver si alguien me puede ayudar.
Dispongo de un archivo en una SD, el cual abro y visualizo los datos que tiene, es de la siguiente forma:

,45.78634,5.674225,65,
,67.34577,4.652546,48,
,23.42675,3.678456,23,

Cada valor entre comas le doy un nombre: latitud,longitud,cantidad,
Lo que quiero hacer ahora es pasar la cadena de caracteres a real y a entero, y que a su vez lo imprima. El error viene cuando en vez de salirme el número convertido me salen ceros: 0.0000,0.0000
Os pongo el programa, a ver si veis cual es mi fallo.

GRACIAS.

#include <SD.h>
const int chipSelect = 53; // en Mega, 53 es el pin CS (en la mayoria 10)
//------------------------------------
int campo=0;
char dato;
char latitud[10];
char longitud[10];
char cantidad[10];
int pos;
float lat;
float lon;
int cant;

void setup(){
 
 Serial.begin(9600);
 Serial.print("Initializing SD card...");
 pinMode(53, OUTPUT); // se debe configurar como salida pq sino la libreria SD no funcionará
 if (!SD.begin(chipSelect)) {  //comprueba si la tarjeta está presente y puede ser inicializada
   Serial.println("Card failed, or not present"); //si entra es que la tarjeta no se inicializa
   return; // no se hace nada más
 }
 Serial.println("card initialized.");
 File dataFile = SD.open("llc.txt"); // se abre el archivo(sólo se puede abrir uno al mismo tiempo)
 if (dataFile) {  //si el archivo esta abierto, se escribe en el
   while (dataFile.available()) {
     Serial.write(dataFile.read());
   }
   dataFile.close();
 }  
 else {
   Serial.println("error opening gps.txt"); //si no se ha abierto el archivo da error
 }  
//-------------------------------------
while (dataFile.available()){
while (campo<4){
  if(dato==','){
  campo++;
  pos=0;
  }
  else{
  if(campo==1){
  latitud[pos++]=dato;
  }
  if(campo==2){
  longitud[pos++]=dato;
  }
  if(campo==3){
  cantidad[pos++]=dato;
  }
  }
dato=dataFile.read();
}
}
}

void loop(){
 
lat=atof(latitud);  //convierto latitud a float
lon=atof(longitud);
cant=atoi(cantidad);
Serial.print(lat,4); //imprimo lat con 4 decimales
Serial.print(',');
Serial.println(lon,4);  
}

mamumo

Vale, me acabo de dar cuenta que los ceros salen porque no recoge el dato de latitud y longitud.
Haciendo el mismo programa pero con:
Serial.print(latitud);
Serial.print(',');
Serial.println(longitud);

obtengo espacio en blanco a ambos lados de la coma. Que ocurre?? por que no me almacena el valor de latitud y longitud??

Go Up