Go Down

Topic: Enviar un "float" via Serial (Read 2358 times) previous topic - next topic

Juantreras

Jan 28, 2011, 07:48 pm Last Edit: Apr 30, 2012, 12:59 am by coleoptero Reason: 1
Hola compañeros:
Llevo algo mas de un año con un proyecto,que,ahora estoi casi acabando,aqui viene el problema,en el casi.Resumiendo esto consta de un Arduino base y uno remoto unidos por dos xbee configurados y funcionando pero,necesito
enviar un dato Float a traves de Serial para poder actualizarlo y almacenarlo en el remoto.Pedí ayuda a un amiguete y me facilito un enlace con el cual puedo solucionar lo del almacenaje en la EEprom pero no se presta para descomponerlo-enviarlo-componerlo de nuevo.Buceando por  los foros y exprimiendo San Goggle he ido encontrando cosas como ,usar "union datatypes un post muy completo para hacerlo vía I2c, pero que yo he sido incapaz de adaptarlo para enviarlo serial: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1284859119/6.
¿Alguien me puede ayudar con la función para enviarlo via Serial? No se que hacer, : si cortarme las venas ó dejarmelas largas....
Un afectuoso saludo a todos

xlopez

Puedes adaptar el código que se usa para imprimir floats, ese codigo está en el directorio de instalación del Arduino en
arduino-0022/hardware/arduinos/cores/arduino/Print.cpp

La función te quedaría mas o menos así.
Code: [Select]
printFloat(double number, uint8_t digits)
//digits es el numero de decimales que quieres imprimir
{
  // Handle negative numbers
  if (number < 0.0)
  {
     Seriel.print('-');
     number = -number;
  }

  // Round correctly so that print(1.999, 2) prints as "2.00"
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)
    rounding /= 10.0;
 
  number += rounding;

  // Extract the integer part of the number and print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  Serial.print(int_part);

  // Print the decimal point, but only if there are digits beyond
  if (digits > 0)
    Serial.print(".");

  // Extract digits from the remainder one at a time
  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint;
  }
}

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