Go Down

Topic: Enviar un "float" via Serial (Read 2334 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