#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
#include <RTClib.h>
RTC_DS1307 rtc;
DateTime waktu;
char buffer[20],buffer2[8];
const float BETA = 3950;
/////////////memory card////////////////
#include <SD.h>
#define pin_cs 4
File fileku,root;
int tadi,sekarang,tadi2;
String NamaFile = "dataku.txt";
String Data;
void setup() {
Serial.begin(9600);
Serial.println("Membaca DHT");
dht.begin();
rtc.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Data Logger");
delay(1000);
lcd.clear();
sdcard_ini();
//buat_File (NamaFile, ambil_waktu(rtc.now());
}
void loop() {
//tambahkan sensor DHT 22,
//tampilkan di LCD hasil pembacaan suhu dalam Celcius
// Tampilkan waktu dalam format jam : menit : detik
//Simpan waktu dan hasil pembacaan suhu setiap 2 menit dengan format
//tanggal/bulan/tahun jam:menit:detik suhu
//tampilkan isi file yang tersimpan setiap 30 menit
/*
NB : fungsi untuk membuat, mengisi dan membaca file telah disiapkan
*/
DateTime waktu = rtc.now();
sekarang = waktu.minute();
lcd.setCursor(0,0);
lcd.print(ambil_waktu(waktu));
dtostrf(ambil_temperatur(),6,2,buffer2);
sprintf (buffer, "suhu : %s c",buffer2);
lcd.setCursor(0,2);
lcd.print(buffer);
dtostrf(ambil_kelembapan(),6,2,buffer2);
sprintf (buffer, "kelembapan : %s %",buffer2);
lcd.setCursor(0,2);
lcd.print(buffer);
if(sekarang %2==0 && sekarang !=tadi)
{
tadi = sekarang;
Data = ambil_waktu(waktu)+"," + ambil_temperatur() +","+ ambil_kelembapan();
isiFile(NamaFile,Data);
}
if(sekarang %30==0 && sekarang !=tadi2)
tadi2 = sekarang;
bacaFile(NamaFile);
}
void isiFile(String NamaFile, String Data)
{
fileku = SD.open(NamaFile,FILE_WRITE);
if(fileku)
{
fileku.println(Data);
fileku.close();
}
else
{
lcd.setCursor(0,3);
lcd.print("Card Error");
while(1);
}
}
void bacaFile(String NamaFile)
{
fileku = SD.open(NamaFile);
if(fileku)
{
while(fileku.available())
{
Serial.write(fileku.read());
}
fileku.close();
}
else
{
lcd.setCursor(0,3);
lcd.print("Card Error");
while(1);
}
}
void cekIsiCard()
{
root = SD.open("/");
while(true){
File cekfile = root.openNextFile();
if(!cekfile)
{
break;
}
Serial.print(cekfile.name());
Serial.print(" ");
Serial.println(cekfile.size());
cekfile.close();
}
}
void buat_file(String NamaFile, String waktu, String header)
{
fileku = SD.open(NamaFile,FILE_WRITE);
if(fileku)
{
fileku.println("ini adalah isi " + NamaFile);
fileku.println("Mulai direkam pada " + waktu);
fileku.println(header);
fileku.close();
}
else
{
lcd.setCursor(0,3);
lcd.print("Card Error");
while(1);
}
}
void sdcard_ini()
{
if(!SD.begin(pin_cs))
{ lcd.setCursor(0,3);
lcd.print("Card Error");
while(1);
}
}
String ambil_waktu(DateTime waktu)
{
sprintf (buffer, "%2d/%2d/%4d %2d:%2d:%2d",waktu.day(),waktu.month(),waktu.year(),waktu.hour(),waktu.minute(),waktu.second() );
return buffer;
}
float ambil_temperatur()
{
// Start a new measurement:
float suhu = dht.readTemperature();
}
float ambil_kelembapan()
{
// Start a new measurement:
float suhu = dht.readHumidity();
}