#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);

#include <RTClib.h>
RTC_DS1307 rtc;
DateTime waktu;
int jam,menit,detik,tahun,bulan,hari;
char temp[20],temp2[12];
 const float BETA = 4095;
 const float GAMMA = 0.7;
const float RL10 = 50;

#include "FS.h";
#include "SD.h";
#include "SPI.h";
String NamaFile = "/dataku.txt";
String Data;
int tadi,tadi2;
void setup() {
   Serial.begin(115200);
 lcd.init();
 rtc.begin();
 if(!SD.begin(5))
 {
   lcd.home();
   lcd.print("Cek SD Card");
   return;
 }
waktu = rtc.now();
   tahun = waktu.year(); //untuk membaca tahun
  bulan = waktu.month();
  hari = waktu.day();
 sprintf(temp,"%4d/%2d/%2d",tahun,bulan,hari);

buatFile(SD, NamaFile, temp ,"waktu,lux");

bacaFile(SD, NamaFile);

 lcd.home();
 lcd.print("Hallo");

  // put your setup code here, to run once:
  //Serial.begin(115200);



}

void loop() {

  // put your main code here, to run repeatedly:
  waktu = rtc.now(); //jika menggunkan rtc dalam pembacaan waktu
  jam = waktu.hour(); //untuk membaca waktu
  menit = waktu.minute();
  detik = waktu.second();
 sprintf(temp,"%2d:%2d:%2d",jam,menit,detik);
 lcd.setCursor(0,1); 
 lcd.print(temp);
  
  tahun = waktu.year(); //untuk membaca tahun
  bulan = waktu.month();
  hari = waktu.day();
 sprintf(temp,"%4d/%2d/%2d",tahun,bulan,hari);
 lcd.setCursor(0,2); 
 lcd.print(temp);

//menggunakan ldr itu di bawah bahasa programnya
 // These constants should match the photoresistor's "gamma" and "rl10" attributes

int analogValue = analogRead(36);
float voltage = analogValue / 4095. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));


  delay(10); // this speeds up the simulation

  // should match the Beta Coefficient of the thermistor
if(detik%5==0 && tadi!=detik){
sprintf(temp,"%2d:%2d:%2d",jam,menit,detik);
Data = (String)temp +","+ lux;
isiFile(SD, NamaFile, Data);
}
if(detik%20==0 && tadi2!=detik){
tadi2 = detik;
bacaFile(SD, NamaFile);
}
}
void cekIsi(fs::FS &fs, const char * dirname, uint8_t levels){
  Serial.printf("Listing directory: %s\n", dirname);

  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,0);
    lcd.print("Baca file : ");
    lcd.setCursor(0,1);
    lcd.print(path);
 
  File file = fs.open(path);
  if(!file){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Gagal membaca");
    return;
  }

  Serial.print("Read from file: ");
  while(file.available()){
    Serial.write(file.read());
  }
  file.close();
}

void buatFile(fs::FS &fs, String path, String  waktu ,String  message){
  lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Buat file : ");
    lcd.setCursor(0,3);
    lcd.print(path);
    
  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("Berhasil menulis");
    delay(2000);
    
  } else {
    lcd.clear();
    lcd.setCursor(0,3);
    lcd.print("Gagal menulis");
  }
  file.close();
}

void isiFile(fs::FS &fs, String path, String message){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Mengisi file : ");
    lcd.setCursor(0,1);
    lcd.print(path);
    
  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();
}

//String ambil_waktu(DateTime waktu)
//{
  //sprintf(buffer,"%2d/%2d/%2d %2d:%2d:%2d",waktu.day(),waktu.month(),waktu.year(),waktu.hour(),waktu.minute(),waktu.second());
  //return buffer;
//}

//float ambil_suhu(int analogValue)
//{
  //float celsius = 1 / (log(1 / (4095. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
  //return celsius;
//}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
GND5VSDASCLSQWRTCDS1307+
rtc1:GND
rtc1:5V
rtc1:SDA
rtc1:SCL
rtc1:SQW
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
ldr1:VCC
ldr1:GND
ldr1:DO
ldr1:AO
sd1:CD
sd1:DO
sd1:GND
sd1:SCK
sd1:VCC
sd1:DI
sd1:CS