#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <FS.h>
#include <SD.h>
#include <SPI.h>

RTC_DS3231 rtc;
Adafruit_SSD1306 display(128, 64, &Wire, -1);
OneWire oneWire(2);
DallasTemperature sensors(&oneWire);
File myFile;

#define DS18B20_PIN 2

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    delay(1000); // Tunggu Serial Monitor terbuka
  }

  // Inisialisasi OLED
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("Tidak dapat menemukan OLED"));
    while (1);
  }

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0, 0);
  display.display();

  // Inisialisasi RTC
  if (!rtc.begin()) {
    Serial.println("Tidak dapat menemukan RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC kehilangan daya, atur waktu");
    // Tambahkan kode untuk mengatur waktu RTC di sini
  }
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(37, 26);
  display.print(" ADS");
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(1, 30);
  display.print("Temperature Detector");
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(18, 21.5);
  display.print("RTC Aman");
  display.display();
  delay(2000);
  display.clearDisplay();

  // Inisialisasi sensor suhu DS18B20
  sensors.begin();

  if (!SD.begin()) {
    Serial.println("Cek lagi kartu SD nya");
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0, 0);
    display.print("MICRO SD Not OK");
    display.display();
    while (1) {
      delay(1000);
    }
  } else {
    Serial.println("Micro SD Aman");
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0, 0);
    display.print("MICRO SD AMAN");
    display.display();
  }

  delay(2000);
  display.clearDisplay();
}

void loop() {
  DateTime now = rtc.now();
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print(now.day(), DEC);
  display.print('/');
  display.print(now.month(), DEC);
  display.print('/');
  display.print(now.year(), DEC);
  display.print(' ');
  display.print(now.hour(), DEC);
  display.print(':');
  display.print(now.minute(), DEC);
  display.print(':');

  display.print(now.second(), DEC);
  display.display();

  // Baca suhu dari sensor DS18B20
  sensors.requestTemperatures();
  float temperature = sensors.getTempCByIndex(0);
  display.setTextSize(1);
  display.setCursor(0, 20);
  display.print("Suhu: ");
  display.print(temperature);
  display.print(" C");
  display.display();

  // Simpan data suhu ke file di MicroSD
  myFile = SD.open("/suhu.txt", FILE_WRITE);
  if (myFile) {
    myFile.print(now.year(), DEC);
    myFile.print('/');
    myFile.print(now.month(), DEC);
    myFile.print('/');
    myFile.print(now.day(), DEC);
    myFile.print(' ');
    myFile.print(now.hour(), DEC);
    myFile.print(':');
    myFile.print(now.minute(), DEC);
    myFile.print(':');
    myFile.print(now.second(), DEC);
    myFile.print(',');
    myFile.println(temperature);
    myFile.close();
  } else {
    Serial.println("Gagal membuka file suhu.txt");
  }

  delay(1000);
}
GND5VSDASCLSQWRTCDS1307+