#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#include <RTClib.h>
RTC_DS1307 rtc;
DateTime waktu;
char buffer[20],buffer2[8];
const float BETA = 3950;
#define pin_trig 7
#define pin_echo 6
#include <SD.h>
#define pin_cs 4
File fileku,root;
String NamaFile = "dataku.txt";
String Data;
int sekarang,tadi,tadi2;
void setup() {
Serial.begin(9600);
rtc.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Data Logger");
delay(1000);
lcd.clear();
sdcard_ini();
pinMode(pin_trig, OUTPUT);
pinMode(pin_echo, INPUT);
buat_file(NamaFile, ambil_waktu( rtc.now()), "Tanggal,Suhu,Jarak");
//cekIsiCard();
}
void loop() {
waktu = rtc.now();
sekarang = waktu.second();
lcd.setCursor(0,0);
lcd.print(ambil_waktu(waktu));
dtostrf(ambil_suhu(analogRead(A0)),6,2,buffer2);
sprintf(buffer,"Suhu : %s C", buffer2);
lcd.setCursor(0,1);
lcd.print(buffer);
dtostrf(ambil_jarak(),6,2,buffer2);
sprintf(buffer,"Jarak : %s cm", buffer2);
lcd.setCursor(0,2);
lcd.print(buffer);
if(sekarang % 5 == 0 && sekarang !=tadi){
tadi = sekarang;
Data = ambil_waktu(waktu) +"," + ambil_suhu(analogRead(A0)) +"," + ambil_jarak();
isiFile(NamaFile, Data);
}
}
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/%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 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
return celsius;
}
float ambil_jarak()
{
//set the TRIG pin to high for 10uS
digitalWrite(pin_trig, HIGH);
delayMicroseconds(10);
digitalWrite(pin_trig, LOW);
//menghitung waktu yang dibutuhkan untuk pantulan
int durasi = pulseIn(pin_echo,HIGH);
float cm=(float) durasi / 58.0;
return cm;
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
sd1:CD
sd1:DO
sd1:GND
sd1:SCK
sd1:VCC
sd1:DI
sd1:CS
rtc1:GND
rtc1:5V
rtc1:SDA
rtc1:SCL
rtc1:SQW
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
ntc1:GND
ntc1:VCC
ntc1:OUT