//LCD
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//RTC
#include "RTClib.h"
RTC_DS1307 rtc;
int jam, menit, detik;
int tahun, bulan,tanggal;
String line1;
char hari[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
//SENSOR JARAK
int trig_pin = 2;
int echo_pin = 3;
long echotime;
float jarak;
//SENSOR SUHU
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int celcius, fahrenheit;
//SD CARD
#include <SD.h>
#include <SPI.h>
const int chipSelect = 10;
File dataFile;
void setup() {
//LCD
Serial.begin(9600);
lcd.begin(0x27, 16, 2);
lcd.setBacklight(HIGH);
lcd.setCursor(3,0);
lcd.print("MEKATRONIK");
lcd.setCursor(3,1);
lcd.print("KELOMPOK 2");
delay(2000);
lcd.clear();
int u;
lcd.setCursor(0, 0);
lcd.print("Data Loger Suhu Dan Jarak");
for (u = 0 ; u < 24; u++) {
lcd.scrollDisplayLeft();
delay(250);
}
lcd.clear();
//RTC
lcd.setCursor(0,0);
lcd.print("memulai... ");
lcd.setCursor(0,1);
lcd.print("RTC DS1307");
delay(1500);
lcd.clear();
if (! rtc.begin()) {
Serial.println("RTC terputus!");
while (1);
}
if (! rtc.isrunning()) {
Serial.println("Setel ulang waktu!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
//SENSOR JARAK
lcd.setCursor(0,0);
lcd.print("memulai... ");
lcd.setCursor(0,1);
lcd.print("SENSOR HC-SR04");
delay(1500);
lcd.clear();
pinMode(trig_pin, OUTPUT);
pinMode(echo_pin, INPUT);
digitalWrite(trig_pin, LOW);
//SENSOR SUHU
lcd.setCursor(0,0);
lcd.print("memulai... ");
lcd.setCursor(0,1);
lcd.print("SENSOR DALLAS");
delay(1500);
lcd.clear();
sensors.begin();
//SD CARD
lcd.setCursor(0,0);
lcd.print("memulai... ");
lcd.setCursor(0,1);
lcd.print("SD CARD");
delay(1500);
lcd.clear();
while (!SD.begin(chipSelect)) {
Serial.println("MASUKAN SD CARD!");
}
Serial.println("SD OK");
delay(1500);
}
void loop(){
//RTC
DateTime now = rtc.now();
jam = now.hour();
menit = now.minute();
detik = now.second();
tahun = now.year();
bulan = now.month();
tanggal = now.day();
//SENSOR JARAK
digitalWrite(trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(trig_pin, LOW);
echotime= pulseIn(echo_pin, HIGH);
jarak= 0.0001*((float)echotime*342.0)/2.0;
lcd.setCursor(0,1);
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.setCursor(14,1);
lcd.print("cm");
//SENSOR SUHU
sensors.requestTemperatures();
celcius = sensors.getTempCByIndex(0);
fahrenheit = sensors.getTempFByIndex(0);
lcd.setCursor(0,0);
lcd.print(celcius);
lcd.print("C");
lcd.print("/");
lcd.print(fahrenheit);
lcd.print("F");
//SD CARD
line1 = String("(") + hari[now.dayOfTheWeek()] + "," + tanggal + "/" + bulan + "/" + tahun + "," + jam + ":" + menit + ":" + detik + ") " + jarak + "cm" + "," + celcius + "C/" + fahrenheit + "F";
dataFile = SD.open("log.txt", FILE_WRITE);
if(dataFile){
Serial.print(line1);
Serial.println();
dataFile.println(line1);
dataFile.close();
Serial.print("tersimpan");
Serial.println();
Serial.println("---------------------------------------------");
lcd.setCursor(14, 0);
lcd.println("ok");
}
else{
Serial.println("GAGAL MENYIMPAN!");
lcd.setCursor(15, 0);
lcd.println("!");
}
delay(1000);
}