Datalogger to sd without Pc

Hallo ich habe eine Frage. Ich habe ein Arduino Uno und einen Modul für die SD card(Das Kleine Modul). Ich möchte 2 Potentiometerwerte einlesen und die auf die Sd carte speichern. Die Vorlage in der Software funktioniert aber nur wenn der Pc angeschlossen ist, aber ich möchte das ganze mit einer Batterie betreiben. Also meine Frage: Was muss ich am Code verändern, damit das ganze auch ohne Pc funktioniert.
Hat wer eine Lösung
Danke im Voraus.

Der Code:

#include <SPI.h>
#include <SD.h>

const int chipSelect = 4;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("Initializing SD card...");

  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    while (1);
  }
  Serial.println("card initialized.");
}

void loop() {
  // make a string for assembling the data to log:
  String dataString = "";

  // read two sensors and append to the string:
  for (int analogPin = 0; analogPin < 2; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 1) {
      dataString += ",";
    }
  }

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("Data.txt", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    // print to the serial port too:
    Serial.println(dataString);
  }
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  }
}

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.

Gruß Tommy

Also meine Frage: Was muss ich am Code verändern, damit das ganze auch ohne Pc funktioniert.

Gar nix.

:o :o :o :o

(deleted)

Hallo,

wie kommst Du darauf das das nur am PC läuft ?

while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

Lass das mal weg das brauchst Du nicht am UNO

Heinz

Peter-CAD-HST:
Moin

eine Spannungsquelle an den Arduino anschließen.

Gruss Peter

Natürlich habe ich eine Spannungsquelle Angeschlossen

Hallo,

Also meine Frage: Was muss ich am Code verändern, damit das ganze auch ohne PC funktioniert.

das muss raus, brauchst du für den Uno sowieso nicht.

while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
}

Rentner:
Hallo,

wie kommst Du darauf das das nur am PC läuft ?

while (!Serial) {

; // wait for serial port to connect. Needed for native USB port only
 }




Lass das mal weg das brauchst Du nicht am UNO

Heinz

Habe das jetzt weg gelassen. geht immer noch nicht.
Ich habe keine Ahnung, am pc werden die Daten auf die sd card gespeichert, wenn ich es mit der Powerbank betreibe dann funktioniert es nicht.

Habe das jetzt weg gelassen. geht immer noch nicht.

Das wissen wir, dass dieses auf dem UNO keine Wirkung hat.

wenn ich es mit der Powerbank betreibe dann funktioniert es nicht.

Und, am Händi Netzteil?

combie:
Das wissen wir, dass dieses auf dem UNO keine Wirkung hat.
Und, am Händi Netzteil?

Funktioniert auch nicht.

Hallo,

Bau ma versuchsweise ein delay(1000) mit in den Loop, ich denke wenn die Serielle Ausgabe nicht erfolgt wird das Ding zu schnell und das schreiben auf die SD verhaspelt sich

Heinz

christophcm:
Funktioniert auch nicht.

Ah, ja...

Ich weiß:

  1. Dass der UNO auch ohne PC funktioniert.
  2. Der SD Carte das auch egal ist
  3. Im Programm sehe ich nichts, was stören könnte.

Was bleibt also über?

Deine Verschaltung.
Das unbekannte Modul.

Ein unbekanntes Geheimnis?

ich denke wenn die Serielle Ausgabe nicht erfolgt wird das Ding zu schnell und das schreiben auf die SD verhaspelt sich

Das kann ich mir kaum vorstellen.
Denn die UART benötigt immer die gleiche Zeit, egal ob PC dran, oder ab.

Hallo,

@Combie das mag sein,
dennoch gehört das was rein , so rappelt das Ding doch blizschnell zu, ich weiss auch nicht wie das zeitlich mit dem ständigen open / close aussieht. Wenn das wirklich schnell sein soll würde ich das ehr weglassen und einmal open und nach 1000 oder was auch immer Anzahl an Messungen ein close machen.

Heinz

Rentner:
Hallo,

@Combie das mag sein,
dennoch gehört das was rein , so rappelt das Ding doch blizschnell zu, ich weiss auch nicht wie das zeitlich mit dem ständigen open / close aussieht. Wenn das wirklich schnell sein soll würde ich das ehr weglassen und einmal open und nach 1000 oder was auch immer Anzahl an Messungen ein close machen.

Heinz

Mit der Delay Funktion hat es jetzt funktioniert. Danke für die Schnelle hilfe

Hallo,

was hast Du denn eigendlich vor , Messungen mit einem festen Zeitabstand machen ja sowiso Sinn. bis 100 ms sollte das so gehen denke ich. Wenns schneller sein soll würde ich das anders aufbauen, die Anzahl begrenzen und nur einmal open und einmal close machen.

Heinz

Schön, dass es jetzt funktioniert!
(Auch wenn mir der Grund noch nicht einleuchtet)

Rentner:
Hallo,

was hast Du denn eigendlich vor , Messungen mit einem festen Zeitabstand machen ja sowiso Sinn. bis 100 ms sollte das so gehen denke ich. Wenns schneller sein soll würde ich das anders aufbauen, die Anzahl begrenzen und nur einmal open und einmal close machen.

Heinz

Ich glaube einmal aufmachen und nach z.b. 1000 einträge wieder schließen und danach wieder öffnen wäre besser. Aber ich weiß nicht wie ich das programmieren soll.

einträge++

Wenn Einträge > 1000 dann
Einträge := 0 und zu machen

christophcm:
Ich glaube einmal aufmachen und nach z.b. 1000 einträge wieder schließen und danach wieder öffnen wäre besser. Aber ich weiß nicht wie ich das programmieren soll.

Das auch. Problematisch wird es aber, wenn die Werte nicht auf die Karte geschrieben werden.
Stichwort: flush()

Kannst Du ausschliessen, das in #1 der Code unvollständig ist?
Sowohl auf einem ARDUINO UNO als auch auf einem uno-clone läuft der sketch an einer logilink pa0124 auch ohne PC und so wie gepostet und mit offenem Ende an den analogen Ports

Wenn Du jedoch ein delay() brauchst, dann fehlen noch erhebliche (blockierende) Codeteile oder/und Angaben zur tatsächlichenHardware. Vor allem zum SD-Modul.

Im Übrigen würde ich nicht fragen, wie oft die Schleife durchlaufen wurde, sondern fragen wieviel Zeit vergangen ist und z.B. nach x (milli)sekunden neu schreiben.