09-07-2020, 17:57
Mam mały problem którego nie wiem jak ugryźć. Chcę zrobić rejestrator zdarzeń z opcją wyświetlania na lcd.
Założenia mam takie, że co 24 godziny będzie się zmieniać nazwa pliku na aktualną datę. Nie mam pojęcia jak to zrobić. Najłatwiej było by zapisać datę do zmiennej string "data", następnie zmienną data połączyć z ".txt" i otrzymać: "data.txt". (tak to widzę: myFile = SD.open(data, FILE_WRITE); ). I tu mam problem. Jak zapisać datę pod stringiem?
Kod:
#include <SD.h>
#include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
File myFile;
DateTime now;
RTC_DS3231 rtc;
String Plik;
void setup ()
{
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
SD.remove("test");
if (!SD.begin(SPI_QUARTER_SPEED, 4)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
Serial.begin(9600);
if (! rtc.begin())
{
Serial.println("Couldn't find RTC Module");
while (1);
}
if (rtc.lostPower())
{
Serial.println("RTC lost power, lets set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop ()
{
now = rtc.now();
// czasIdata();
Serial.println();
zapisSD();
Serial.println();
odczytSD();
delay(30000);
Plik;
}
/*
void czasIdata()
{
Serial.print(now.hour());
Serial.print(':');
if (now.minute() < 10) {
Serial.print("0");
Serial.print(now.minute());
} else {
Serial.print(now.minute());
}
Serial.print(" ");
if (now.day() < 10) {
Serial.print("0");
Serial.print(now.day());
} else {
Serial.print(now.day());
}
Serial.print('/');
if (now.month() < 10) {
Serial.print("0");
Serial.print(now.month());
} else {
Serial.print(now.month());
}
Serial.print('/');
Serial.print(now.year());
}*/
void zapisSD(){
Serial.println("zapis");
myFile = SD.open("plik.txt", FILE_WRITE);
if (myFile) {
myFile.print("\n");
myFile.print(now.hour());
myFile.print(':');
if (now.minute() < 10) {
myFile.print("0");
myFile.print(now.minute());
} else {
myFile.print(now.minute());
}
myFile.print("\n");
if (now.day() < 10) {
myFile.print("0");
myFile.print(now.day());
} else {
myFile.print(now.day());
}
myFile.print('/');
if (now.month() < 10) {
myFile.print("0");
myFile.print(now.month());
} else {
myFile.print(now.month());
}
myFile.print('/');
myFile.print(now.year());
myFile.print("\n");
myFile.close();
}
else {
Serial.println("error opening test.txt");
}
}
void odczytSD(){
Serial.println("odczyt");
myFile = SD.open("plik.txt");
if (myFile) {
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
} else {
Serial.println("error opening test.txt");
}
}
Założenia mam takie, że co 24 godziny będzie się zmieniać nazwa pliku na aktualną datę. Nie mam pojęcia jak to zrobić. Najłatwiej było by zapisać datę do zmiennej string "data", następnie zmienną data połączyć z ".txt" i otrzymać: "data.txt". (tak to widzę: myFile = SD.open(data, FILE_WRITE); ). I tu mam problem. Jak zapisać datę pod stringiem?