#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);
}