#include "RTClib.h"
#include <SD.h>
File textFile;
RTC_DS1307 rtc;
#define CS_PIN 53
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
long count = 0;
long lastCount = 0;
String date_data = "";
String time_data = "";
String day_data = "";
String dataString = "";
String areacode = "";
String filename = "datalog.csv";
String title = "Kyware Project";
bool csv_file = false;
bool fileFindString(File textFile, String searchString) {
while (textFile.available()) {
if (textFile.readStringUntil('\n').indexOf(searchString) != -1) {
return true;
}
}
return false;
}
void setup () {
Serial.begin(115200);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
if (!rtc.begin()) {
Serial.println("RTC TIDAK TERBACA");
while (1);
// Serial.flush();
// abort();
}
if (!rtc.isrunning())
{
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //update rtc from pc
}
Serial.print("Initializing SD card... ");
if (!SD.begin(CS_PIN)) {
Serial.println("Card initialization failed!");
while (true);
}
Serial.println("initialization done.");
textFile = SD.open(filename);
if (textFile) {
if (fileFindString(textFile, title)) {
csv_file = true;
Serial.println("File berisi tulisan 'title'");
} else {
csv_file = false;
Serial.println("File tidak berisi tulisan 'title'");
}
}
else{
textFile = SD.open(filename, FILE_WRITE);
textFile.println(title);
textFile.println("Hari || Tanggal || Jam || Counter");
textFile.close();
}
textFile = SD.open(filename);
if (textFile) {
if (fileFindString(textFile, title)) {
csv_file = true;
Serial.println("File berisi tulisan 'title'");
lastCounterValue = getCounterValue();
Serial.println(lastCounterValue);
} else {
csv_file = false;
Serial.println("File tidak berisi tulisan 'title'");
}
}
}
void loop () {
if(digitalRead(5)==LOW){
textFile = SD.open(filename);
if (textFile) {
Serial.print("Counter = ");
Serial.println(getCounterValue());
} else {
Serial.println("Gagal membuka file datalog.csv!");
}
}
if(digitalRead(4)==LOW){
count += 1;
textFile = SD.open(filename, FILE_WRITE);
if (textFile) {
textFile.println(dataString);
textFile.close();
}
delay(500);
textFile = SD.open(filename);
if (textFile) {
while (textFile.available()) {
Serial.write(textFile.read());
}
textFile.close();
} else {
Serial.println("Gagal membuka file datalog.csv!");
}
}
DateTime now = rtc.now();
// date_data = "DATE:" + String(now.day()) + '/' + String(now.month()) + '/' + String(now.year());
// time_data = " TIME:" + String(now.hour()) + ':' + String(now.minute()) + ':' + String(now.second());
// day_data = " Day : " + String(daysOfTheWeek[now.dayOfTheWeek()]);
day_data = String(daysOfTheWeek[now.dayOfTheWeek()]);
date_data = " || " + String(now.day()) + '/' + String(now.month()) + '/' + String(now.year());
time_data = " || " + String(now.hour()) + ':' + String(now.minute()) + ':' + String(now.second());
dataString = day_data + date_data + time_data + " || Counter : " + count;
//DateTime now = rtc.now();
// Serial.print("Current time: ");
// Serial.print(now.year(), DEC);
// Serial.print('/');
// Serial.print(now.month(), DEC);
// Serial.print('/');
// Serial.print(now.day(), DEC);
// Serial.print(" (");
// Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
// Serial.print(") ");
// Serial.print(now.hour(), DEC);
// Serial.print(':');
// Serial.print(now.minute(), DEC);
// Serial.print(':');
// Serial.print(now.second(), DEC);
// Serial.println();
// Serial.print(date_data);
// Serial.print(time_data);
// Serial.println(day_data);
// delay(3000);
}
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
// no more files
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}
int getCounterValue() {
// Mencari nilai counter terakhir
String lastLine;
while (textFile.available()) {
lastLine = textFile.readStringUntil('\n');
}
textFile.close();
// Mendapatkan nilai counter dari baris terakhir
int index = lastLine.indexOf("Counter : ");
if (index != -1) {
return lastLine.substring(index + 10).toInt();
}
return -1; // Jika tidak ditemukan nilai counter
}