ganze zahlen aus einer SD Text Datei

Hallo,

ich erhalte immer nur den ASCII von der ersten Ziffer der Zahl, ich bräuchte die ganze Zahl so das ich mathematisch mit arbeiten kann.

if (set == LOW) { if(plus == LOW) { tanken++; tankg++; delay(30);}
lcd.setCursor (0,3); lcd.print ("Getankt: "); lcd.print (tanken); lcd.print (tankg); lcd.print("l");
if (speicher == LOW) {SD.remove ("tankst.txt");
TankSt = SD.open ("tankst.txt", FILE_WRITE); TankSt.println (tankg); TankSt.close();}}

TankSt = SD.open ("tankst.txt"); tankg=TankSt.read(); TankSt.close ();

in der Text Datei steht tatsächlich nur ein Wert, zB 1204, das sollen Liter sein.

Wenn ich die Datei auslese habe ich immer nur die 49 (ASCII 1). Ich könnte schreien. kann man da nicht was eifacheres machen wie zB beim EEPROM?

schnelle Hilfe wäre Super...

hat sich erledigt habs gefunden:

TankSt = SD.open ("tankst.txt");
char linebuf[40]; // 40 reicht für Zeilen bis 37 Zeichen Länge + CR+LF+\0
int counter=0;
memset(linebuf,0,sizeof(linebuf)); // ausnullen des Zeilenspeichers
while (TankSt.available()) {
linebuf[counter]=TankSt.read();
if (linebuf[counter]=='\n') break; // Zeilenende, Schleife verlassen
if (counter<sizeof(linebuf)-1) counter++;
}
// Jetzt wurde bis zum Zeilenende oder bis zum Dateiende gelesen
// und nun nachschauen, was gelesen wurde und in Variablen packen
// Achtung, es kommt auf exakte Gross- und Kleinschreibung an!
tankg=atof(linebuf);

; TankSt.close ();
// Liter = SD.open ("liter.txt"); oell = Liter; Liter.close ();
// mLiter = SD.open ("mliter.txt"); count = mLiter; mLiter.close ();

}

Glückwunsch, da hast du eine Menge gelernt, hoffentlich nicht nur

Achtung, es kommt auf exakte Gross- und Kleinschreibung an!

Das nächste bei C, nach Groß/Klein-Schreibung, sind Datentypen, die du verheimlichst.
tankg++; lässt mich raten, dass es ein int ist.
atof liefert allerdings ein float.

Positive Integer wandelt man am einfachsten durch Multiplikation mit 10 bei jeder zusätzlichen Ziffer.
Dann brauchst du noch nicht mal die ganze Zeile zuerst zu lesen:
Und sparst dir float-Funktionen wie atof.

Fehlt noch zu prüfen was passiert, wenn gar keine Datei namens tankst.txt da ist ...
Und statt 3 Dateien für 3 Werte würde ich mit einer mehrzeiligen Datei weiter machen...

unsigned long readNumberFromFile(File f)
{
   unsigned long result = 0;
   if (f)
   {
      while (f.available())
      {
        char c = f.read();
        switch (c)
        {
        case '0':  case '1':  case '2':  case '3': case '4': case '5':  case '6':  case '7':  case '8': case '9':
             result = result*10 + c - '0';   // - '0' wandelt das Zeichen '0' ... '9' in eine Zahl 0 ... 9
             break;
        case '\r': case ' ': 
             break;  // Diese Zeichen einfach ignorieren
        case '\n':
             return result;   // OK, Zeile fertig, nächster Aufruf liest die nächste Zeile
        default:
             // jedes andere Zeichen : wahlweise  ...
             //  ignorieren  //  Fehler-Abbruch  //  ok Abbruch // ok, aber Rest der Zeile lesen  ...
             return 0 ; //  hier Fehler-Abbruch
        }
     }
     return result; // Ende der Datei (ohne abschliessendes '\n' , auch ok)
   }
   else
   {
      return 0; // Datei existiert nicht ?
   }
}

Viel Erfolg weiterhin !