Autor Tema: problemas con cambio de variable float a string  (Leído 2056 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado bitclock001

  • PIC10
  • *
  • Mensajes: 20
problemas con cambio de variable float a string
« en: 03 de Noviembre de 2014, 21:33:17 »
Saludos

Tengo problemas para convertir una variable tipo float a string, para transmitir al PC por puerto serial, creo que tengo el código bien, pero me saca un error en la línea donde realizo la conversión a string (no identificado).  Tengo el CS compiler versión 4.093, pienso que falta una librería, inserto el código completo: 

Código: [Seleccionar]
#INCLUDE <16F887.H>
#DEVICE ADC=10 //Define que el conversor trabaja a 10 bits
#USE DELAY(CLOCK=4000000)
#USE  RS232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7) 
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
#BYTE PORTA=5
#DEFINE USE_PORTB_LCD TRUE
#INCLUDE <LCD.C>
#INCLUDE <STDIO.H>

FLOAT VOLTAJE,VOLT,VOLTA;//Definir la variable VOLTAJE comouna variable tipo LONG
MAIN()
{
SET_TRIS_A(0B11111111);
SETUP_ADC_PORTS(ALL_ANALOG);
SETUP_ADC(ADC_CLOCK_DIV_8);

LCD_INIT();
LCD_PUTC("\f");
LCD_GOTOXY(1,1);
LCD_PUTC("  CONVERSOR A/D");

WHILE(1)
{
SET_ADC_CHANNEL(0);
DELAY_MS(1);
VOLTAJE=READ_ADC();
VOLT=(5*VOLTAJE)/1023;

LCD_GOTOXY(1,2);
PRINTF(LCD_PUTC," VOLTAJE= %01.3fV",VOLT);//Muestra el valor numérico de la conversión.
DELAY_MS(200);

sprintf(string,"\f%1.3f",VOLT);//Paso a string el valor float
PUTC(VOLT);
delay_ms(150);
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: problemas con cambio de variable float a string
« Respuesta #1 en: 04 de Noviembre de 2014, 00:20:24 »
Código: [Seleccionar]
int main ()
{
  char buffer [50];
  int n, a=5, b=3;
  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
  printf ("[%s] is a string %d chars long\n",buffer,n);
  return 0;
}

Salida:
[5 plus 3 is 8] is a string 13 chars long

Un ejemplo que encontre donde muestra el sprintf
Te saca el error por que en donde tenes escrito string va una variable que no tenes definida, mira el ejemplo asi te das cuenta.
« Última modificación: 04 de Noviembre de 2014, 00:22:48 por KILLERJC »

Desconectado bitclock001

  • PIC10
  • *
  • Mensajes: 20
Re: problemas con cambio de variable float a string
« Respuesta #2 en: 05 de Noviembre de 2014, 20:10:11 »
Cuál variable?

El error es que me colorea la instrucción string y me saca el mensaje Undefined Identifier string

Este es la porción de código que me saca el error

Código: [Seleccionar]
SET_ADC_CHANNEL(0);
DELAY_MS(1);
VOLTAJE=READ_ADC();
VOLT=(5*VOLTAJE)/1023;

LCD_GOTOXY(1,2);
PRINTF(LCD_PUTC," VOLTAJE= %01.3fV",VOLT);//Muestra el valor numérico de la conversión.
DELAY_MS(200);

sprintf(string,"\%1.3fv",VOLT);//Paso a string el valor float
PUTC(VOLT);
delay_ms(150);
« Última modificación: 05 de Noviembre de 2014, 20:19:32 por bitclock001 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: problemas con cambio de variable float a string
« Respuesta #3 en: 05 de Noviembre de 2014, 23:50:26 »
Es que no tenes definido una variable, eso quise hacerte entender con el codigo que puse.

Tu codigo:
Citar
sprintf(string,"\%1.3fv",VOLT);

El que te pase (un poquito modificado):
Citar
char buffer[50];
sprintf (buffer, "%.3f", VOLT);

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: problemas con cambio de variable float a string
« Respuesta #4 en: 06 de Noviembre de 2014, 11:59:27 »
Yo lo hago así, esta función la idee yo pero la puedes modificar a tu gusto, de todas maneras sigo trabajando en ella para hacerla más automática.
Tuve que hacerlo así porque en c18 no admite variables en punto flotante la función sprintf.

Código: [Seleccionar]
/************************************************************************
  Función:
void *FloatCadena(signed float valor, char wLeng, char ComaPosicion, unsigned char *array);

  Sumario:
Convierte un caracter o un dato en punto flotante (float) a un array

  Descripción:


   Precondición:
Ninguna
  
   Parámetros:
valor = se le introduce el dato en formato float

wLeng = Longitud del array

ComaPosicion = Posición del punto ósea la coma que queremos poner en el array

array_float = Puntero hacia un array donde se guardará el float coinvertido en ASCII

   Retorno:
un array con el dato float pasado a ASCII, ejemplo: "23.90"

   Ejemplo:
 FloatCadena(23.90, 5, 2, array_float);
  
*****************************************************************************/


//Conversión de un float en un array
void *FloatCadena(signed float valor, char wLeng, char ComaPosicion, char *array_float){
char i = 0;
char a = 0;
signed int entero = 0;
char ArrayFuncion[7];

entero = valor *1000; //Convertimos el decimal en un valor entero
itoa(entero, ArrayFuncion); //Convierte el entero en una cadena

for(i=0;i<wLeng;i++){
array_float[i] = ArrayFuncion[a++];
if(i==ComaPosicion){
array_float[ComaPosicion] = '.'; //Punto para el valor en decimal //se pone a 0 el contador
a = a-1;
}
}
if(i == wLeng){
array_float[wLeng] = '\0';
}
}

no sé si será lo que estas buscando, siento las faltas de ortografía  :oops:

aaa me olvidaba decir que admite valores negativos
« Última modificación: 06 de Noviembre de 2014, 12:04:28 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: problemas con cambio de variable float a string
« Respuesta #5 en: 06 de Noviembre de 2014, 13:32:52 »
YO creo que es lo mejor Thulsa ya que no incluis toooooda la libreria y solo la funcion :)

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: problemas con cambio de variable float a string
« Respuesta #6 en: 06 de Noviembre de 2014, 14:26:50 »
es que solo esta función es suficiente, la añades a tu código fuente y le añades los datos que pide y te funcionará, estudiala.

no sé si ccs tiene restringida la función sprintf como en c18
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado bitclock001

  • PIC10
  • *
  • Mensajes: 20
Re: problemas con cambio de variable float a string
« Respuesta #7 en: 16 de Noviembre de 2014, 19:11:13 »
OK.  Muchas gracias

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: problemas con cambio de variable float a string
« Respuesta #8 en: 17 de Noviembre de 2014, 06:41:45 »
hay una cosa que no funciona bien del todo en la función, si le pones un decimal que empiece por 0, el código te anula el 0, ósea si le pones un decimal como -1.0, o 2.34, funcionará bien, pero si le pones un decimal como 0,5 o -0.5, en esa situación falla, se come el 0 , con lo cual el valor 0.5 te lo convierte en 5, sigo trabajando para ver si lo soluciona.
siento que la función no trabaje todo lo bien de debiera
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: problemas con cambio de variable float a string
« Respuesta #9 en: 17 de Noviembre de 2014, 13:06:01 »
Aqui tienen un ejemplo que funcina en el proteus 100%

Citar
#include <18f252.h>
#Fuses xt,nowdt,put

#use delay (crystal=4000000)
#use rs232(baud=9600, xmit= pin_b0, rcv= pin_b1)


void main()
{
   int16 dato;
   float valor;
   char st1[10];
   
   dato= 561;
   valor= dato*5.0/1023;
   
   sprintf(st1,"%.4f",valor);
   printf("%s",st1);
   
   sleep();


}
  :mrgreen:

Saluds