Sensorwerte auf sd karte schreiben

Hallo,
ich habe folgendes Programm geschrieben um die Werte eines DHT22 Sensors auf eine SD Karte zu schreiben. Die Datei Test.txt wird zwar erstellt allerdings nicht beschrieben. Jetzt wollte ich wissen ob dies am Code liegt oder eine andere Fehlerquelle wahrscheinlicher ist.
#include <SD.h>
#define mq A0
int sensorwert;
float konzentration ;

File Textdatei;          // An dieser Stelle wird die Variable "Textdatei" als File (dts. Datei) deklariert.

void setup() {
  Serial.begin(9600);
  Serial.println("Initialisiere SD-Karte");   
   pinMode(0, INPUT);
    sensorwert = analogRead(mq);  
    konzentration = sensorwert / 10.23;
    
  if (!SD.begin(5)) {                                     // Wenn die SD-Karte nicht (!SD.begin) gefunden werden kann, ...
    Serial.println("Initialisierung fehlgeschlagen!");    // ... soll eine Fehlermeldung ausgegeben werden. ....
    return;
  }
  
  Serial.println("Initialisierung abgeschlossen");        // ... Ansonsten soll die Meldung "Initialisierung abgeschlossen." ausgegeben werden.
  Textdatei = SD.open("test.txt", FILE_WRITE);   // An dieser Stelle wird die Textdatei erstellt. Unsere Textdatei soll "test" heißen und im Format ".txt" (Text) erstellt werden. 
  
  if (Textdatei) 
{                                        // Wenn die Textdatei ("test.txt") gefunden wurde....
    Textdatei.println("Schadstoffkonzentration:");                   // ... und die Textdatei anschließend befüllt werden. 
    Textdatei.println(konzentration);
    Serial.println("Abgeschlossen.");                     // ... und eine erneute Meldung im seriellen Monitor ausgegeben.
    Serial.println();
} 
  else 
{                                                        // Wenn !keine! Textdatei gefunden werden kann ...
    
    Serial.println("Textdatei konnte nicht ausgelesen werden");   // ... erscheint eine Fehlermeldung im seriellen Monitor.
}
  
                                                         // NUN WIRD DIE TEXTDATEI AUSGELESEN 
  Textdatei = SD.open("test.txt");                            // Die Textdatei auf der SD-Karte wird wieder geoeffnet...
  
  if (Textdatei) {                                            
  Serial.println("test.txt:");                              // ... und der Name der Datei wird ausgegeben. 
    while (Textdatei.available())                             // Anschließend wird die Datei so lange ausgelesen (while)...
    {                          
      Serial.write(Textdatei.read());                         // ... bis keine Daten mehr gefunden werden können.
    }
   
  Textdatei.close();                                        // Im Anschluss wird die Textdatei wieder geschlossen.
} 

   else                                                             // Sollte keine Textdatei (also test.txt) gefunden werden können...
   
    {
    Serial.println("Textdatei konnte nicht geoeffnet werden");      // ... erscheint eine Fehlermeldung im seriellen Monitor.
    }
    
}

void loop()    // Der Loop bleibt leer.
{ 
}

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Was für einen Controller nutzt du ?
Der Pin D0 ist vermutlich eins deiner Probleme.
Den solltest du besser nicht als Input nutzen.

#include <SD.h>
const byte mqPin = A0;
const byte csPin = 5;
int sensorwert;
float konzentration;
File textFile;          // An dieser Stelle wird die Variable "Textdatei" als File (dts. Datei) deklariert.


void setup()
{
  Serial.begin(9600);
  Serial.println(F("Initialisiere SD-Karte"));
  // pinMode(mqPin, INPUT);
  if (!SD.begin(csPin))                                       // Wenn die SD-Karte nicht (!SD.begin) gefunden werden kann, ...
  {
    Serial.println("Initialisierung fehlgeschlagen!");    // ... soll eine Fehlermeldung ausgegeben werden. ....
  }
  else
  { Serial.println("Initialisierung abgeschlossen"); }        // ... Ansonsten soll die Meldung "Initialisierung abgeschlossen." ausgegeben werden.
  schreibeSensorWert();
  leseSensorDatei();
}

void schreibeSensorWert()
{
  sensorwert = analogRead(mqPin);
  konzentration = sensorwert / 10.23;
  textFile = SD.open("test.txt", FILE_WRITE);   // An dieser Stelle wird die Textdatei erstellt. Unsere Textdatei soll "test" heißen und im Format ".txt" (Text) erstellt werden.
  if (textFile)
  {
    // Wenn die Textdatei ("test.txt") gefunden wurde....
    textFile.println("Schadstoffkonzentration:");                   // ... und die Textdatei anschließend befüllt werden.
    textFile.println(konzentration);
    Serial.println("Abgeschlossen.");                     // ... und eine erneute Meldung im seriellen Monitor ausgegeben.
    Serial.println();
  }
  else
  {
    // Wenn !keine! Textdatei gefunden werden kann ...
    Serial.println("Textdatei konnte nicht ausgelesen werden");   // ... erscheint eine Fehlermeldung im seriellen Monitor.
  }
  textFile.close();
}

void leseSensorDatei()
{
  // NUN WIRD DIE TEXTDATEI AUSGELESEN
  textFile = SD.open("test.txt");                            // Die Textdatei auf der SD-Karte wird wieder geoeffnet...
  if (textFile)
  {
    Serial.println("test.txt:");                              // ... und der Name der Datei wird ausgegeben.
    while (textFile.available())                             // Anschließend wird die Datei so lange ausgelesen (while)...
    {
      Serial.write(textFile.read());                         // ... bis keine Daten mehr gefunden werden können.
    }
  }
  else                                                             // Sollte keine Textdatei (also test.txt) gefunden werden können...
  {
    Serial.println("Textdatei konnte nicht geoeffnet werden");      // ... erscheint eine Fehlermeldung im seriellen Monitor.
  }
  textFile.close();
}

void loop()    // Der Loop bleibt leer.
{
}

Den Arduino Uno, kann ich den mq sensor dann einfach an einen anderen DO Pin anschließen und wenn ja muss ich das dann im Programm definieren?
Danke für die Antwort

An sich funktioniert das Programm, ich bekomm aber immer folgende Meldung:
Ungültige Bibliothek U:\Eigene Dateien\Arduino\libraries\Download in keine Header-Dateien (.h) in U:\Eigene Dateien\Arduino\libraries\Download gefunden gefunden
Ungültige Bibliothek U:\Eigene Dateien\Arduino\libraries\Download in keine Header-Dateien (.h) in U:\Eigene Dateien\Arduino\libraries\Download gefunden gefunden
Die Bibliothek ist aber richtig installiert.
Außerdem funktioniert es nicht, wenn ich die voids zum auslesen und schreiben in den loop stelle, es kommen weder neue werte dazu, noch wird die sd karte erneut ausgelesen.
LG und Danke

Du musst schon genauer schreiben was wird angezeigt. Fehlermeldungen kopieren und hier zeigen, sonst wird nix von.

Es ist ja in dem Sinne keine Fehlermeldung (habe ich mich unverständlich ausgedrückt, sorry), d.h. es gibt auch keine Möglichkeit zum Kopieren, den relevanten Teil (also alles außer Programmspeichernutzung etc.) habe ich kopiert. Heißt das dann auch, dass es unbedenklich ist?

Schein so aussehen das die Download dort nicht gehört, man kann das nicht genau beantworten wir, i kennen nicht sehen was alles in dem Ordner ist

ich glaube, dass es heißt, dass die bibliothek zwar nicht im ursprünglichen ordner gefunden wurde, aber woanders und deswegen alles gut ist. KAnn das sein?
Danke für die Antwort und LG

Du verwendest den D0, in Worten D null.
D steht für Digital und 0 (null) ist die zugehörige Pinnummer.
D0 ist ein Pin für den seriellen Eingang der vom USB-Serialwandler benutzt wird.
Da kannst du den Upload oder den seriellen Monitor stören. Im schlechtesten Fall funktioniert der Upload (Flashen) nicht.
Und ja, nach dem Ändern musst du das im Sketch a passen, sonst geht da wieder nix.

Edit:
Bei dir scheint das kein Problem zu sein, da du im weiteren Sketch diesen Pin nicht verwendest.

Da kannst du diese Zeile gern löschen.

Ja, das ist so.
Also nicht wirklich ein Problem.

@childaper - Das sollte an Dich gehen - bin falsch abgebogen :wink:

Die Meldung müsste man in Gänze sehen.
Dann könnte man drauf reagieren und da nochmal nachsehen, was Du an Deiner Installtion verändern musst.

Also nach dem kompilieren den Inhalt aus dem schwarzen Fenster kopieren und hier in code-tags einfügen.

Du solltest die Ardiuno-IDE nach dieser Anleitung einstellen und dann auch nach dieser Anleitung die Ausgabe des Compilers als Code-Section posten

vgs

Also in meinen Augen sind da 2 !! mögliche Probleme die man erst einmal trennen muss.

  1. Problem / Frage :
    Werden die Werte des Sensors richtig angezeigt im Monitor. Und damit meine ich nicht nur 1 x sondern laufend .

wenn JA, dann
können wir uns mit den SD-Karten lesen/schreiben beschäftigen.

Ich persönlich würde das ganze sogar programmtechnisch trennen und nicht so viele IF-Abfragen machen.

Im Setup Testen ob alles da ist, Besonders die SD-Karte.

Dann im LOOP regelmässig den Sensor abfragen und von DORT eine neue VOID aufrufen namens SD_schreiben.

In diese Void dann die Datei zum Schreiben öffnen, die Daten schreiben und danach die Datei wieder schliesen.

Das ist Ordnung um man kann den Fehler leichter eingrenzen.

Gruß

Pucki

PS: Schau man in den Ordner den die IDE als Fehlhaft anzeigt und schau nach das da KEIN Ordner Download drin ist. Die Fehlermeldung kommt bei mir wenn der Compiler einen Order in Libary finden in den sich KEINE *.h befindet. Tested

Der Fehler kommt vor wenn man (meist) Github-Dateien direkt in Libary herunter lädt.
Tipp : Die Dateien in einen Extra-Download-Ordner laden und dann auspacken. Der Ergebnis ist fast immer ein Ordner. Den dann in den Ordner Libarys verschieben.

Da Du den Code nicht gelesen hast, fällt Dir natürlich auch nicht auf, wie ich das berichtigt habe.
Ich find es klasse, dass Du gerade im Begriff bist den nächsten Thread kaputt zu machen.

Stimmt DEIN Code habe ich nicht gelesen. Nur den den TO.

Sorry

Gruß

Pucki

List ja nie was, nur schreibst sofort los öfters auch wen keine Ahnung hast.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.