Go Down

Topic: error de conversion (Read 667 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy