Kommazahl über ser. Schnittstelle in EEprom

Gast #4278703
Lesenswert?
• ▲
▼
Hallo zusammen,

ich würde gerne über die serielle Schnittstelle Kommazahlkonstanten in 
den EEprom meines Atmega schreiben. Mit int-Variablen funktioniert das 
alles sehr gut, nur wenn ich es auf float-Variable ändere, wird der Wert 
gleich 0, sobald ich in der switch-Abfrage etwas reinschreiben will.
Als Befehl im Terminalprogramm gebe ich z.Bsp. "0 17.59" ein.

Was mache ich da falsch ?

float eeWertA EEMEM  = 17.59;
float eeWertB EEMEM  = -0.293;
float eeWertC EEMEM  = 648.8;
float eeWertD EEMEM  = -1.94;

float Wert;

uart_gets(Buffer, 20);   // Auf eine Zeile vom Benutzer warten

switch (Buffer[0] - '0')

      {
          case (0): //Wert A

      Wert = atof( &Buffer[10] );
      eeprom_write_float (&eeWertA, Wert);

      break;

    case (1): //Wert B

      Wert = atof( &Buffer[10] );
      eeprom_write_float (&eeWertB, Wert);

      break;

  }
Gast #4278716
Lesenswert?
• ▲
▼
Michael gib mal das richtige Programm und nicht SO ein murks.

>"0 17.59"
Wenn das deine Eingabe ist wie soll

>Wert = atof( &Buffer[10] );
Da was gutes raus kommen?????

prüfst du 'Wert' auf 0.0 bzw NaN ?
Gast #4278739
Lesenswert?
• ▲
▼
>"0 17.59"
Wenn das deine Eingabe ist....

Muss die Bearbeitung auch an der richtigen Stelle beginnen...
>Wert = atof( &Buffer[2] );

dann schau dir mal die Funktion atof() genau an, was gib sie im 
Fehlerfall zurück?
Wenn bei dir 0.0 erlaubt ist hast du noch einiges vor dir.

Musst du denn unbedingt float verwenden?
Gast #4278746
Lesenswert?
• ▲
▼
Stephan schrieb:
> dann schau dir mal die Funktion atof() genau an, was gib sie im
> Fehlerfall zurück?
> Wenn bei dir 0.0 erlaubt ist hast du noch einiges vor dir.
>
> Musst du denn unbedingt float verwenden?

atof() wird im Fehlerfall wohl 0 ausgeben.
Die Eingabe 0.0 wird bei gar nicht vorkommen, da ich die Variablenwerte 
manuell eingebe.

Es muss nicht unbedingt float sein, aber ich würde es gerne als 
Kommazahl eingeben, und es ungern über eine Int-Umrechnung machen. Aber 
wenn's so einfach nicht geht, dann bleibt mir wohl nichts anderes übrig.
Gast #4278758
Lesenswert?
• ▲
▼
Stephan schrieb:
> nur der Start der Decodierung war im Beispiel zur Eingabe total

Mit dem Start der Decodierung meinst du
switch (Buffer[2] - '0')
anstatt
switch (Buffer[0] - '0')

oder ?
Leider funtkioniert es noch immer nicht. Der Wert der Variablen ändert 
sich durch die Eingabe leider gar nicht mehr.
Gast #4278798
Lesenswert?
• ▲
▼
schau dir mal dies an:
http://www.c-howto.de/tutorial-strings-zeichenketten-stringfunktionen-zerteilen-strtok.html
Dann kannst du die starren Offsets vielleicht raus nehmen und die 
Kommandos und Werte besser auswerten.

Wenn du eine solche Kommandozeile einbaust, wäre es etwas besser für den 
User, wenn du es in etwa so machst: (lesbarer)
set Var0 Wert (schreiben)
get Var0 (lesen)
clr Var0 (löschen)
def Var0 (default Wert)

nur als Beispiel!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.