Saludos.
Quisiera que me ayudaran con un pequeño problema acerca la conversion de un String a un float. Les cuento que hace un par de dias vengo realizando un proyecto el cual consiste en un dispositivo capaz de monitorear la bateria y otras variables mas de un coche y esta pueda enviar toda esa informacion a un celular por bluetooth.
He tenido un buen avance respecto a al envio de datos, mi problema comienza cuando desde el celular necesito enviar ciertos parametros de inicio al dispositivo, como ser la hora y fecha actual, asi tambien el intervalo de muestre que se quiere realizar y por ultimo algunos parametros necesariamente decimales.
He logrado guardar toda esa informacion en un arreglo de caracteres, y partir del arreglo ir separando toda la informacion recibida. A la hora de separar los parametros decimales, decidi usar un arreglo de String de tal forma poder convertir cada elemento en un float a traves de la funcion String.toFloat(), pero lamentablemente solo me convierte la parte entera dejando en cero la parte decimal.(83.54 --> 83.00).Asi tambien he usado otras funciones como ser atof() pero me sigue dando el mismo resultado.
Aqui les dejo una parte del codigo donde realizo esa operacion.
#include <SPI.h>
#include <SD.h>
#include <SoftwareSerial.h>//Libreria para puerto puerto serial
#include <Time.h>//libreria para fecha y hora
#include <TimeLib.h>
SoftwareSerial hc06(7,8);//usamos pines RX=7||TX=8
#define A 5//pin para controlar el pin A del multiplexor 4052
#define B 6//pin para controlar el pin B del multiplexor 4052
#define CS 10//pin para seleccionar memoria SD
File dataFile;
int conf_inicial[55];//array para recibir configuracion inicial
int time_ref[6]={0,0,0,0,0,0};//tiempo de referencia
double variables[9]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};//array para guardar las variables de lectura
double var_aux[9]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};//array auxiliar para guardar variables de lectura
unsigned long actual,previo=0,periodo,act_t,prev_t,ref_milis;//guardan valores de temporizacion y periodo de muestreo
int periodo1=100,periodo2=1,periodo3=10,periodo4=100;//intervalos de muestreo
double voltMax=20,intMax=100,tempMax=100;//valores para establecer umbral de lectura
int i,punt=0,ref,aux;//variables auxiliares
String paramRecta[8];//almacena cadena de parametros A y B de la recta
float param_Recta[8];//almacena valores de parametros A y B de la recta
String data_tx="";
void setup() {
Serial.begin(115200);//Inicializamos puerto Serial PC
hc06.begin(57600);//Inicializamos puerto Serial Bluetooth
pinMode(A,OUTPUT);//Habilitamos pin A como salida
pinMode(B,OUTPUT);//Habilitamos pin B como salida
pinMode(CS,OUTPUT);//Habilitamos pin CS como salida
digitalWrite(A,LOW);//Ponemos pin A en LOW
digitalWrite(B,LOW);//Ponemos pin B en LOW
if(!SD.begin(CS)){//Verificamos si existe Tarjeta SD
hc06.println("Fallo o tarjeta no presente");
return;
}
hc06.println("Tarjeta SD OK");
delay(500);
while(!hc06.available());//Esperamos por interrupcion serial por bluetooth
while(hc06.available()>0){//Mientras haiga datos en el puerto serial realizamos la lectura
conf_inicial[punt]=hc06.read();//almacenamos datos en array de configuracion inicial
punt++;//saltamos a la siguiente posicion del array
delay(10);//tiempo maximo para entre lecturas
}
punt=0;
for(ref=0;ref<5;ref++){//separamos la hora y fecha de referencia
for(i=1;i>=0;i--){
time_ref[ref]+=(conf_inicial[punt]-48)*pow(10,i);
punt++;
}
}
for(i=3;i>=0;i--){//separamos el año
if(i==0){
conf_inicial[punt]++;
}
time_ref[ref]+=(conf_inicial[punt]-48)*pow(10,i);
punt++;
}
switch(conf_inicial[punt]-48){//verificamos el intervalo de muestreo
case 0:
periodo=(long)periodo1;
break;
case 1:
periodo=(long)periodo2*1000;
break;
case 2:
periodo=(long)periodo3*1000;
break;
case 3:
periodo=(long)periodo4*1000;
break;
}
punt++;
for(ref=0;ref<8;ref++){//separamos la cadena de parametros de la recta
for(i=0;i<5;i++){
if(conf_inicial[i]=='.'){
paramRecta[ref]+=conf_inicial[punt];
punt++;
}else{
paramRecta[ref]+=(conf_inicial[punt]-48);
punt++;
}
}
}
for(ref=0;ref<8;ref++){
param_Recta[ref]=paramRecta[ref].toFloat();
}
setTime(time_ref[0],time_ref[1],time_ref[2],time_ref[3],time_ref[4],time_ref[5]);//inicializamos hora y fecha de referencia
hc06.print("El muestreo se realizara cada ");
hc06.print(periodo);
hc06.println(" ms y los parametros son:");
for(ref=0;ref<8;ref=ref+2){
hc06.print(param_Recta[ref]);
hc06.print(" y ");
hc06.println(param_Recta[ref+1]);
}
ref=0;
}
Espero puedan ayudarme con este problema, y gracias de antemano