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);
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 ?
}
}