Pages: [1]   Go Down
Author Topic: Enviar un "float" via Serial  (Read 2089 times)
0 Members and 1 Guest are viewing this topic.
Madrid
Offline Offline
Newbie
*
Karma: 1
Posts: 22
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: April 29, 2012, 05:59:08 pm by coleoptero » Logged

0
Offline Offline
Jr. Member
**
Karma: 5
Posts: 72
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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;
  }
}
Logged

Pages: [1]   Go Up
Jump to: