Arduino: printf/fprintf druckt Fragezeichen anstelle von float

Habe ich folgenden code für ein Arduino-sketch:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
static FILE lcdout = {0} ;

static int lcd_putchar(char ch, FILE* stream)
{
    lcd.write(ch) ;
    return (0) ;
}

void setup() {
  lcd.begin(16, 2);
  fdev_setup_stream (&lcdout, lcd_putchar, NULL, _FDEV_SETUP_WRITE);
}

void loop() 
{
  stdout = &lcdout;
  printf("%.2f Volts", 2.0);
}

Das problem kommt in der letzten Zeile des Codes. Diese sollten ausgedruckt "2.00 Volt", sondern es gibt "? Volt" (ein Fragezeichen anstelle des eigentlichen float Wert). Wenn ich versuche, ein integer-format, das funktioniert Super.

Also im Grunde, wenn ich ersetzen Sie die printf-Zeile mit den folgenden, wird es richtig funktioniert:

printf("%d Volts", 2); //prints correctly "2 Volts"

Irgendeine Idee, was das problem ist ?

  • Eine vereinfachte-down-stdlib, die nicht mit floating-point-conversions?
  • Genau.
  • Was komisch ist, dass wenn man nur ein lcd.print(2.0) wird es drucken genau das, was Sie wollen. Keine Notwendigkeit für sprintf oder nicht. Und Sie können angeben, die Anzahl der Ziffern rechts dezimal, mit einem optionalen zweiten parameter. E. g. lcd.print(2,3) geben Sie "2.000".
InformationsquelleAutor Nicu Surdu | 2013-01-03
Schreibe einen Kommentar