Forum: Mikrocontroller und Digitale Elektronik SD Karten-Code Problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von heike (Gast)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von Dr. Sommer (Gast)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.