#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#include <RTClib.h>
RTC_DS1307 rtc;
DateTime waktu;
char buffer[20],buffer2[10];
const float BETA = 3950;
#include "FS.h"
#include "SD.h"
#include "SPI.h"
String NamaFile = "/dataku.txt";
String Data;
int sekarang,tadi,tadi2;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
rtc.begin();
lcd.init();
lcd.backlight();
lcd.home();
lcd.print("ESP 32");
delay(1000);
lcd.clear();
if(!SD.begin(5)){
lcd.setCursor(0,3);
lcd.print("cek nicro SD!");
return;
}
waktu = rtc.now();
sprintf(buffer,"%2d/%2d/%2d",waktu.day(),waktu.month(),waktu.year());
buatFile(SD, NamaFile, buffer ,"waktu,suhu");
}
void loop() {
waktu = rtc.now();
sekarang = waktu.second();
sprintf(buffer,"%2d/%2d/%2d %2d:%2d:%2d",waktu.day(),waktu.month(),waktu.year(),waktu.hour(),waktu.minute(),waktu.second());
lcd.setCursor(0,0);
lcd.print(buffer);
int analogValue= analogRead(36);
float celsius = 1 / (log(1 / (4095. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
dtostrf(celsius,6,2, buffer2);
sprintf(buffer,"Suhu : %s C ", buffer2);
lcd.setCursor(0,1);
lcd.print(buffer);
if(sekarang % 5 == 0 && tadi!=sekarang)
{
tadi = sekarang;
sprintf(buffer,"%2d/%2d/%2d %2d:%2d:%2d",waktu.day(),waktu.month(),waktu.year(),waktu.hour(),waktu.minute(),waktu.second());
Data = (String)buffer + "," +celsius;
isiFile(SD, NamaFile, Data);
}
if(sekarang % 10 == 0 && tadi2!=sekarang)
{
tadi2 = sekarang;
bacaFile(SD, NamaFile);
}
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}
void cekIsi(fs::FS &fs, const char * dirname, uint8_t levels){
File root = fs.open(dirname);
if(!root){
lcd.clear();
lcd.setCursor(0,3);
lcd.print("Gagal buka folder");
return;
}
if(!root.isDirectory()){
lcd.clear();
lcd.setCursor(0,3);
lcd.print("Bukan folder");
return;
}
File file = root.openNextFile();
lcd.clear();
int j=0;
while(file){
if(file.isDirectory()){
Serial.print(" DIR : ");
Serial.println(file.name());
if(levels){
cekIsi(fs, file.name(), levels -1);
}
} else {
lcd.setCursor(0,j);
lcd.print(file.name());
j++;
}
file = root.openNextFile();
}
}
void bacaFile(fs::FS &fs, String path){
lcd.clear();
lcd.setCursor(0,2);
lcd.print("Baca file : ");
lcd.setCursor(0,3);
lcd.print(path);
File file = fs.open(path);
if(!file){
lcd.clear();
lcd.setCursor(0,3);
lcd.print("Gagal membaca");
return;
}
while(file.available()){
Serial.write(file.read());
}
file.close();
}
void buatFile(fs::FS &fs, String path, String waktu ,String message){
File file = fs.open(path, FILE_WRITE);
if(!file){
lcd.clear();
lcd.setCursor(0,3);
lcd.print("Gagal menulis");
delay(2000);
return;
}
if(file){
// Serial.printf("Appending to file: %s\n", path);
file.print("ini adalah isi ");
file.println(path);
file.print("Mulai direkam pada ");
file.println(waktu);
file.println(message);
lcd.clear();
lcd.setCursor(0,3);
lcd.print("OK Buat File");
delay(2000);
} else {
lcd.clear();
lcd.setCursor(0,3);
lcd.print("Gagal menulis");
}
file.close();
}
void isiFile(fs::FS &fs, String path, String message){
File file = fs.open(path, FILE_APPEND);
if(!file){
lcd.clear();
lcd.setCursor(0,3);
lcd.print("Gagal mengisi");
return;
}
if(file.println(message)){
lcd.clear();
lcd.setCursor(0,3);
lcd.print("Isi tertambah");
} else {
lcd.clear();
lcd.setCursor(0,3);
lcd.print("Gagal mengisi");
}
file.close();
}