Hallo,
Ich bin dabei mir einen Datenlogger zu programmieren, Das geht auch soweit schon.
Ich gebe die Zeit serial und auf SDKarte aus. Mein Problem wo Ich nicht weiterkomme ist, dass Ich jeden Tag eine neue Datei erstellen will (JJMMDD) und die alte behalten.
Ich habe einen UnoR3 mit einem SDKartenShield.
#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <SD.h>
// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 10;
unsigned long previousMillis3 = 0; // speichert wie viele Sekunden seit derletzten Änderung vergangen sind
unsigned long interval3 = 2000; // Interval zwischen zwei Änderungen
File dataFile;
//File filename;
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println("DS1307RTC Read Test");
Serial.println("-------------------");
Serial.print("Initializing SD card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(SS, OUTPUT);
// 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.");
//create a new file
}
void loop() {
//Takt wie oft serial und auf SDKarte geschrieben wird
if (millis() - previousMillis3 > interval3) {
previousMillis3 = millis(); // aktuelle Zeit abspeichern
char filename[8];
int year = 2018;
int month = 8;
int day = 2;
CreateLogfileName(filename, year, month, day);
Serial.println(filename);
dataFile = SD.open ("zaehlen.csv", FILE_WRITE); //open the file
tmElements_t tm;
if (RTC.read(tm)) {
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
// delay(9000);
}
// delay(1000);
// Auf SDKarte schreiben
if (dataFile)
{
dataFile.print(" Meter");
dataFile.print(";");
print3digits(tm.Hour);
dataFile.write(':');
print3digits(tm.Minute);
dataFile.write(':');
print3digits(tm.Second);
dataFile.print(", Date (D/M/Y) = ");
dataFile.print(tm.Day);
dataFile.write('/');
dataFile.print(tm.Month);
dataFile.write('/');
dataFile.print(tmYearToCalendar(tm.Year));
dataFile.println();
dataFile.close();
}
}
}
// Digits für Serial
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}
// Digits für SD Karte
void print3digits(int number) {
if (number >= 0 && number < 10) {
dataFile.write('0');
}
dataFile.print(number);
}
void CreateLogfileName(char* buffer, int y, int m, int d)
{
sprintf(buffer, "zaehlen.csv", y, m, d);
//sprintf(buffer, "%04d%02d%02d.txt", y, m, d);
}