Forum: Mikrocontroller und Digitale Elektronik Fehler beim Öffnen der Datei


von Realschule D. (realschule_d)


Lesenswert?

Hallo zusammen,

für ein Projekt an unserer Schule habe ich einen Arduino Nano mit 
unterschiedlichen Sensoren verbunden und will diese gewonnenen Daten auf 
einer SD-Karte speichern. Die Sensoren habe ich einzeln überprüft und 
diese haben reagiert. Leider komme ich beim Speichern der Ergebnisse 
nicht weiter und hoffe ihr könnt mir helfen. Compiling hat funktioniert, 
Initialisierung der SD-Karte auch erfolgreich, aber dann wird der 
Fehler: "Fehler beim Öffnen der Datei" geworfen. Die SD Karte ist nur 
1GB groß und wurde mit SD Format frisch formatiert.

Hier der Code:
1
#include <SPI.h>
2
#include <SD.h>
3
#include <Adafruit_BMP085.h>
4
5
File meineDatei;
6
Adafruit_BMP085 bmp;
7
8
void setup() {
9
  // SD-Karte initialisieren
10
  Serial.begin(9600);
11
  while (!Serial) {
12
    ; // warten auf serielle Portverbindung.
13
  }
14
15
  if (!bmp.begin()) {
16
  Serial.println("Could not find a valid BMP085 sensor, check wiring!");
17
  while (1) {}
18
  }
19
20
  if (!SD.begin(10)) {
21
    Serial.println("Initialisierung fehlgeschlagen!");
22
    return;
23
  }
24
  Serial.println("Initialisierung erfolgreich.");
25
26
  // Öffnen der Datei. Beachten Sie, dass nur ein Programm zur Zeit auf die Datei schreiben kann.
27
  meineDatei = SD.open("ergebnisse.txt", FILE_WRITE);
28
29
  // Schreiben Sie die Ergebnisse der Programme in die Datei
30
  if (meineDatei) {
31
    meineDatei.println("Ergebnisse von Programm 1:");
32
    meineDatei.println(programm1());
33
    meineDatei.println("Ergebnisse von Programm 2:");
34
    meineDatei.println(programm2());
35
    meineDatei.println("Ergebnisse von Programm 3:");
36
    meineDatei.println(programm3());
37
    meineDatei.println("Ergebnisse von Programm 4:");
38
    meineDatei.println(programm4());
39
40
    // Schließen der Datei
41
    meineDatei.close();
42
  } else {
43
    // wenn das Öffnen der Datei fehlschlägt:
44
    Serial.println("Fehler beim Öffnen der Datei");
45
  }
46
}
47
48
void loop() {
49
  // Nichts zu tun hier
50
}
51
52
String programm1() {
53
  int TMP36 = A1;
54
  int sensorwert;
55
  int temperatur = 0;
56
  int t = 500;
57
58
  sensorwert = analogRead(TMP36);
59
  temperatur = map(sensorwert, 0, 410, -50, 150);
60
  delay(t);
61
  return String(temperatur) + " Grad Celsius";
62
}
63
64
String programm2() {
65
  int xA = analogRead(A3);
66
  int yA = analogRead(A2);
67
  int zA = analogRead(A6);
68
69
  return String(xA) + "," + String(yA) + "," + String(zA);
70
}
71
72
String programm3() {
73
  const byte soundpin = A0;
74
  int sample = analogRead(soundpin);
75
  float volt_calc = sample * (5.0 / 4096.0);
76
77
  return String(sample) + "\t" + String(volt_calc);
78
}
79
80
String programm4() {
81
  
82
  float temp = bmp.readTemperature(); // °C
83
    
84
  float press = bmp.readPressure(); // Pa
85
    
86
  float alt = bmp.readAltitude(); // meters
87
88
  return String(temp) + "\t" + String(press) + "\t" + String(alt) ;
89
}

Vielen Dank schon Mal für eure Ideen!

Gruß, Roman

: Bearbeitet durch Moderator
von Harald K. (kirnbichler)


Lesenswert?

Realschule D. schrieb:
> "ergebnisse.txt"

Das entspricht nicht der 8.3-Namenskonvention, kann denn der 
FAT-Treiber, den Du da verwendest, mit langen Dateinmen umgehen?

Probier einfach mal "TEST.TXT" aus.

von Wastl (hartundweichware)


Lesenswert?

Realschule D. schrieb:
> Vielen Dank schon Mal für eure Ideen!

Dann üben wir noch das Lesen der Hinweise zum Posten
von Code:
1
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

und
1
[c ]C-Code [/c ]

von Hmmm (hmmm)


Lesenswert?

"The library supports FAT16 and FAT32 file systems on standard SD cards 
and SDHC cards. It uses short 8.3 names for files."

https://www.arduino.cc/reference/en/libraries/sd/

von Harald K. (kirnbichler)


Lesenswert?

Hmm. Hab' ich wohl nicht die falsche Frage gestellt.

von Realschule D. (realschule_d)


Lesenswert?

Hallo,

das war's. Ich hab es auf result.txt geändert und es funktioniert!

Danke!

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.