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.
; // 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.
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
@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.
@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
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.
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.
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.