Forum: Mikrocontroller und Digitale Elektronik SD Karten-Code Problem


von heike (Gast)


Lesenswert?

Hallo.
Ich habe ein Problem mit dem Code des SD-Karten Moduls.
Mein Ziel:
Auf die SD Karte soll nur am Anfang ein einziges mal zB. "SD karte 
bereit" geschrieben werden.
Danach sollen in der loop() Funktion jede Sek. sensor Daten gespeichert 
werden.
Mein Problem:
...
void setup(){
if (SD.begin())
  {   myFile = SD.open("Projekt.txt", FILE_WRITE);
    myFile.println("SD Karte ist funktionsbereit");
   } else{
    myFile.println("Fehler beim einlesen der SD Karte!");
    return;
  }}

void loop() {
myFile = SD.open("test.txt", FILE_WRITE);
  if (myFile) {
myFile.println(val);
 myFile.close(); // close the file
  } else {
   Serial.println("Dokument kann nicht geöffnet werden! ");
  }
  delay(1000);
}


 Bei dem Code habe ich in loop und setup  SD.open() verwendet weil ich 
meine,
das in setup für das einmalige speichern von "SD Karte ist 
funktionsbereit"
schon SD.open() notwendig ist, aber in loop ebenfalls weil bei der 
Schleife jedesmal wieder SD.open() gebraucht wird ansonsten bleibt das 
txt-Dokument durch das letzte myFile.close() doch geschlossen und kann 
keine Sensor-Daten aufnehmen ?!
Dieser Code funktioniert wie schon gedacht nicht.
Hat jemand einen schlauen Tipp oder Lösung parat?

MfG Heike

von Jim M. (turboj)


Lesenswert?

heike schrieb:
> Dieser Code funktioniert wie schon gedacht nicht.

Was genau funktioniert nicht? Mit der Fehlerbeschreibung kan niemand was 
anfangen.


Im setup() fehlt übrigens das myFile.close(), d.h. das File wird nicht 
geschlossen und u.U. nix auf die SD Karte geschrieben.

IMO müsste das eine Projekt.txt mit 0 Bytes ergeben, die nach einem 
Scandisk Lauf eine Länge von einem Cluster bekommt. Kenne mich aber mit 
den Arduino Libs nicht sonderlich gut aus.

Der else Zweig im setup() ist auch alles Andere als funktional.

von heike (Gast)


Lesenswert?

Ja vielen Dank.
Das Problem war das ich nicht in setup() myFile.close() geschrieben 
habe.
FG. Heike

von Dr. Sommer (Gast)


Lesenswert?

heike schrieb:
> void setup(){
> if (SD.begin())
>   {   myFile = SD.open("Projekt.txt", FILE_WRITE);
>     myFile.println("SD Karte ist funktionsbereit");
>    } else{
>     myFile.println("Fehler beim einlesen der SD Karte!");
>     return;
>   }}

Wie genau soll denn die Fehlermeldung in die Datei geschrieben werden, 
wenn die Datei nicht geöffnet werden konnte?!

Außerdem ist es natürlich enorm ineffizient, die Datei ständig aufs neue 
zu öffnen und zu schließen... Die Karte lebt so vermutlich auch kürzer, 
wenn ständig der Verzeichniseintrag neu geschrieben wird.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.