#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
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