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
  ArduinoDroid Probleme Brother Tak 1 199 10.09.2016 22:12
Letzter Beitrag: Brother Tak
  Roboter-Bau Probleme blebbens 8 376 12.07.2016 07:35
Letzter Beitrag: Binatone
  Makeblock mit Scratch programmieren- Probleme Keinen Schimmer 6 956 06.05.2016 18:34
Letzter Beitrag: arduinopeter
  Programme vom UNO auf nano , mini Pro portieren Probleme anwo 19 1.175 17.04.2016 21:12
Letzter Beitrag: hotsystems
  Probleme beim Auslesen eines IR Empfängers linuxpaul 7 572 06.03.2016 14:44
Letzter Beitrag: hotsystems
  I²C vom NANO zum PI Probleme mit High/Low Bit Tobias1984 4 329 29.02.2016 00:00
Letzter Beitrag: hotsystems
  Probleme beim auswählen des Ports Levi 11 819 21.02.2016 18:00
Letzter Beitrag: hotsystems
  IRemote probleme mit abfrage schnutzkurt 18 1.145 20.02.2016 01:30
Letzter Beitrag: SkobyMobil
  Probleme mit SPI - Ethernet und nRF24L01 itsy 35 2.973 21.11.2015 19:59
Letzter Beitrag: ardu_arne
  ESP8266 EEPROM Probleme Pf@nne 5 2.441 09.10.2015 18:00
Letzter Beitrag: Pf@nne

Gehe zu:


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