INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Probleme mit sprintf() und dtostrf()
08.06.2016, 15:55 (Dieser Beitrag wurde zuletzt bearbeitet: 08.06.2016 16:06 von rkuehle.)
Beitrag #9
RE: Probleme mit sprintf() und dtostrf()
Zitat:Ich bin ja nicht so die große Leuchte im coden, aber wenn ich das richtig sehe verwendet die dtostrf Funktion jetzt intern die sprintf() Funktion. Wenn diese jedoch nicht supportet wird für float würde es erklären warum nichts funktioniert
Also "große" Codeleser sind wir alle nicht (mehr oder weniger). Ich wollte dich damit nicht "klassifizieren"...liegt mir absolut fern...steht mir auch nicht zu.
Wenn es so angekommen sein sollte, dann Entschuldigung von meiner Seite.

Zum eigentlichen Problem:
ich weiß nicht wirklich wo das Problem liegt, ich benutze dtostrf() seid Jahr und Tag auf dem Arduino (nicht irgendwelche Abkömmlinge davon) ohne ProblemeHuh Woher stammt die Aussage, dass dtosrf() auf Arduino für float-Werte nicht läuft???
Grüße Ricardo
Edit: Ansonsten die Alternative hier: http://www.instructables.com/files/orig/...3YF5IZ.ino probieren

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.06.2016, 08:19 (Dieser Beitrag wurde zuletzt bearbeitet: 09.06.2016 08:40 von GMBU.)
Beitrag #10
RE: Probleme mit sprintf() und dtostrf()
Die Aussage stammt aus keiner verbindlichen Quelle, ich wollte das eher als Frage verstanden wissen, weil
dtosrf() die Funktion sprintf() benutzt, und sprintf() nicht für float funktioniert, womöglich also auch dtosrf Probleme bereitet.

Ich weiß jetzt auch nicht ob die Bibliotheken die gleichen sind wenn du einen UNO benutzt und ich einen M0, der ja nicht AVR basiert ist. Aber ich kann ja mal sehen ob man das irgendwie vergleichen kann, es müßte ja im C:\Program Files (x86)\Arduino\hardware\arduino AVR Zweig und im SAM Zweig die dtosrf Funktion geben wenn ich das richtig verstehe.

Ich glaube ja auch das das Problem hier vor dem Bildschirm sitzt :-),
aber wenn ich im ansonsten alles korrekt übertragenden CodeAbschnitt der seriellen Datenübertragung den Codeschnipsel
Code:
float f = 14.5664; // der Float aus dem Sensor
char buf[8]; // Pufferarray für Character (Anzahl Zeichen +1)
dtostrf(f, 7, 2,buf); // 7 Stellen inkl. Punkt, davon 2 hinter dem Punkt
SerialUSB.print(F(buf));
einfüge, dann kommt - gar nichts- wo die Zahl übertragen werden sollte. Keine Nullen keine Leerzeichen, nichts, meine dann folgenden Zahlen im Datensatz kommen aber.

Danke für den Alternativhinweis, das funktioniert im Prinzip, ist natürlich härterer Tobak als meine drei if Zeilen.
Wie stelle ich da die Stringlänge fest ein damit ich die benötigten führende Nullen bekomme, der Code arbeitet ja mit variabler Länge?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.06.2016, 14:41
Beitrag #11
RE: Probleme mit sprintf() und dtostrf()
Moin,

das mit dem M0 habe ich (blöderweise) übersehen.
Stimmt, man kann ihn zwar soweit bringen, dass er übersetzt, es kommt aber nix rüber.
Hier mal eine Alternative die auf 12.3456 abgestimmt ist, also 7 Zeichen, 4 hinter dem Punkt.
Ersatzfunktion:
Code:
char *dtostrf_m0(double value, int width, unsigned int precision, char *result)
{
  int decpt, sign, reqd, pad;
  const char *s, *e;
  char *p;
  s = fcvt(value, precision, &decpt, &sign);
  if (precision == 0 && decpt == 0) {
  s = (*s < '5') ? "0" : "1";
    reqd = 1;
  } else {
    reqd = strlen(s);
    if (reqd > decpt) reqd++;
    if (decpt == 0) reqd++;
  }
  if (sign) reqd++;
  p = result;
  e = p + reqd;
  pad = width - reqd;
  if (pad > 0) {
    e += pad;
    while (pad-- > 0) *p++ = ' ';
  }
  if (sign) *p++ = '-';
  if (decpt <= 0 && precision > 0) {
    *p++ = '0';
    *p++ = '.';
    e++;
    while ( decpt < 0 ) {
      decpt++;
      *p++ = '0';
    }
  }    
  while (p < e) {
    *p++ = *s++;
    if (p == e) break;
    if (--decpt == 0) *p++ = '.';
  }
  if (width < 0) {
    pad = (reqd + width) * -1;
    while (pad-- > 0) *p++ = ' ';
  }
  *p = 0;
  return result;
}
Beispiel:
Code:
void setup() {
  while( !SerialUSB ) ;
  Serial.begin(9600);
}

void loop() {
  char str1[20];
  char str2[20];
  x += 0.001;
  y -= 0.001;
  dtostrf_m0(x, 7, 4, str1);
  dtostrf_m0(y, 7, 4, str2);
  SerialUSB.print( "X Val:" );
  SerialUSB.print( str1 );
  SerialUSB.print( " Y Val:" );
  SerialUSB.println( str2 );
}
Hope it helps!
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.06.2016, 10:52
Beitrag #12
RE: Probleme mit sprintf() und dtostrf()
DANKE !

Nicht das ich das noch vergesse :-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Probleme beim Hochladen eines Sketches Thandor 8 414 08.06.2018 13:19
Letzter Beitrag: Thandor
  Arduin Radio Head Library driver Probleme gandalf7588 3 477 08.04.2018 13:05
Letzter Beitrag: gandalf7588
  Probleme mit multiplexing Thor Wallhall 55 3.862 18.03.2018 18:06
Letzter Beitrag: Tommy56
  Treppenbeleuchtung Probleme mit LED Anzahl Cellman 1 309 18.03.2018 10:13
Letzter Beitrag: hotsystems
  Probleme mit Scheduler Arduino DUE juergen001 5 505 15.03.2018 11:44
Letzter Beitrag: juergen001
  Probleme mit DS3231 Geeros#18 6 570 26.02.2018 14:09
Letzter Beitrag: Tommy56
  Probleme mit der Software Thor Wallhall 8 931 31.12.2017 11:34
Letzter Beitrag: Tommy56
  Makeblock mit Scratch programmieren- Probleme Keinen Schimmer 17 4.776 30.12.2017 00:40
Letzter Beitrag: koma1965
  Probleme Serieller Kommunikation Arduino Nextero 13 935 12.12.2017 16:47
Letzter Beitrag: hotsystems
  Interrupt und I2C gibt das Probleme? Badger1875 5 801 03.10.2017 23:26
Letzter Beitrag: GuaAck

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste