Problem mit printf

Hallo zusammen, ich versuche mit printf die Ausgabe von float-Werten. Dies scheint wohl was Besonderes zu sein. Wenn ich richtig gelesen habe ist das u.a. auch maschinenabhänig. Im Playground ist eine Modifikation von „print.h“ beschrieben. Leider kein Erfolg. Die print.h funktioniert aber weiter. Ich wollte folgende Ausgabe haben:

printf("Now sending data  %f %f %f %i %i %i %i %i %i %f \n\r",
    rxValues.yaw, rxValues.pitch, rxValues.roll, rxValues.throttle,
    rxValues.pushButton[0], rxValues.pushButton[1], rxValues.pushButton[2], rxValues.pushButton[3], rxValues.pushButton[4], 
    rxValues.checksum);
ypedef struct __attribute__((__packed__)) {
  uint16_t throttle;

  float yaw;
  float pitch;
  float roll;

  uint8_t pushButton[5];

  float checksum;
} rxValues_t;
rxValues_t rxValues;

Hallo zusammen, ich versuche mit printf die Ausgabe von float-Werten. Dies scheint wohl was Besonderes zu sein. Wenn ich richtig gelesen habe, ist das u.a. auch maschinenabhänig. Im Playground ist eine Modifikation von „print.h“ beschrieben. Leider kein Erfolg. Die print.h funktioniert aber weiter. Ich wollte folgende Ausgabe haben:

    printf("Now sending data  %f %f %f %i %i %i %i %i %f %i \n\r",
    rxValues.yaw, rxValues.pitch, rxValues.roll, rxValues.throttle,
    rxValues.pushButton[0], rxValues.pushButton[1], rxValues.pushButton[2], rxValues.pushButton[3],    rxValues.pushButton[4], rxValues.checksum);

Das Ergebnis ist aber: "Now sending data ? ? ? 1 2 3 4 5 6 ?"

Es handelt sich um eine Struktur:

typedef struct __attribute__((__packed__)) {
  float yaw;
  float pitch;
  float roll;
  uint16_t throttle;
  uint8_t pushButton[5];
  float checksum;
} rxValues_t;
rxValues_t rxValues;

Diese Ausgabe ist natürlich nur für´s debugging. Was mache ich nun wieder nicht richtig?

Gruß Willi

printf() geht auf dem Arduino nicht mit float. Das ist dokumentiert: http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html#gaa3b98c0d17b35642c0f3e4649092b9f1

Einen Patch dazu gibt es hier: http://forum.arduino.cc/index.php/topic,124809.msg940922.html#msg940922 Das bläht aber printf() auch um weitere 1,5 kB auf (egal ob man es benutzt oder nicht). Deshalb ist das standardmäßig nicht drin.

dtostrf() ist manchmal eine Alternative, aber formatiert nur einen Wert: http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42