Daten schreiben auf SD-Card bricht immer ab

Liebes Forum,
ich bin bei meinem ersten Projekt mit meinem Latein am Ende und bitte um Hilfe:
Ich möchte Daten zur Luftqualität auf einem LCD-Dilplay anzeigen und zugleich mit einem Zeitstempel auf eine SD-Karte schreiben.
Dazu benutze ich ein Arduino Nano und einen MicroSD Kartenleser.
Es funktioniert alles ca. 12 mal ganz perfekt, dann kommt immer die Fehlermeldung "error opening test.txt"

Wo steckt der Wurm?

LuftQualiSD.ino (3.52 KB)

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Hallo,

ich vermute das du die Pins 0,1 mit A0 und A1 verwechselst und damit der Controller leider auch. Grundsätzlich lässt man die digitalen Pins 0 und 1 erstmal frei, solange wie nur möglich. Denn dort hängt der USB dran und damit das flashen des Sketches. Könnte Mist machen, vielleicht genau wie in deinem Fall.

also nochmal, das sind andere Pins:

pinMode( 0 , INPUT);  // Pin 0 dient nun als Input für MQ135
pinMode( 1 , INPUT);  // Pin 0 dient nun als Input Für MQ2

als diese:

SensorMQ135 = analogRead(0);      // Zuerst werden die Werte am Pin A0 und A1 ausgelesen...
SensorMQ2 = analogRead(1);

Das heißt für dich, pinMode für analoge Eingänge braucht man nicht.
Nutze eindeutige Namen für Pin A0 und A1 und setze diese in analogRead ein.

const byte pinMQ135 = A0;
const byte pinMQ2 = A1;
...
...
SensorMQ135 = analogRead(pinMQ135);      
SensorMQ2 = analogRead(pinMQ2);

Ansonsten sehe ich erstmal nichts auffällig falsches.

spitze01:
Wo steckt der Wurm?

const int chipSelect = 4;
[...]
pinMode(SS, OUTPUT);

Sollte SS nicht chipSelect heissen?

Hallo,

das mit dem SS Pin passt schon. Ist Hardware bedingt vom "SPI Modul". Außerdem ist SD.begin auch korrekt. Ansonsten könnte er nie schreiben.

if (!SD.begin(chipSelect)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

Doc_Arduino:
Hallo,

das mit dem SS Pin passt schon. Ist Hardware bedingt vom "SPI Modul". Außerdem ist SD.begin auch korrekt. Ansonsten könnte er nie schreiben.

Das hatte ich auch gesehen.

Vielleicht liegts auch am Aufbau.
Der MQ135 zieht bis zu 350mW [AZ Beschreibung] und der MQ2 bis 900mW [Datenblatt]

Vielen Dank für die vielen Hinweise, das ist ein tolles Forum !
Dem letzten Hinweis folgend habe ich mal probeweise den MQ-2 abgeklemmt. Es bleibt dabei: Es werden nach jedem Reset bis zu 15 Zeilen Daten in die Text-Datei geschrieben, dann ist Schluß mit der Fehlermeldung.

Hallo,

und haste die Pins korrigiert? :o

Also die beiden Sensoren funktionieren ja einwandfrei. Auch das Schreiben auf die SD funktioniert ja erst mal prima. Nur warum bricht der Schreibvorgang nach einer Weile ab? Warum kann die Datei nach 12 bis 16 Schreibvorgängen nicht mehr geöffnet werden? Ich hab auch einmal einen Sensor abgeklemmt, falls der Nano durch zu viel Strom überlastet wird. Das hat aber auch nichts verbessert.
Ich bin ratlos. Vielleicht fange ich noch einmal von vorn an mit nur einem Temperatursensor.
Vielen Dank noch einmal.

myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
myFile = SD.open("test.txt",FILE_WRITE);

Wieso 2 mal Datei öffnen?
Kann es sein das die immer 2 mal geöffnet und einmal geschlossen wird und es deshalb nicht tut?
Habe bisher noch nie mit SD-Karten am Arduino gearbeitet, aber das kommt mir seltsam vor...

Gruß, Jürgen

PS: 255 Posts. Hoffentlich ist mein Post Zähler keine Byte Variable...

Hallo Jürgen,
Vielen Dank für Deinen hilfreichen Tipp!
Es war tatsächlich die Lösung, jetzt funktioniert alles!

Gruß, Meinhard

Super wenn es jetzt funktioniert.

Danke für die Rückmeldung!

Gruß, Jürgen