#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <RTClib.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#define BUTTON_PIN 3
#define SD_CS_PIN 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
RTC_DS1307 rtc;
unsigned long lastLogTime = 0;
const unsigned long logInterval = 5000; // Log every 5 seconds
void setup() {
Serial.begin(9600);
sensors.begin();
Wire.begin();
rtc.begin();
pinMode(BUTTON_PIN, INPUT_PULLUP);
if (!rtc.isrunning()) {
Serial.println("RTC is not running, setting default time.");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Set to compile time
}
Serial.println("Initializing SD card...");
if (!SD.begin(SD_CS_PIN)) {
Serial.println("SD card initialization failed!");
return;
}
Serial.println("SD card initialized.");
}
void loop() {
unsigned long currentTime = millis();
// Log temperature and time every 5 seconds
if (currentTime - lastLogTime >= logInterval) {
lastLogTime = currentTime;
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
DateTime now = rtc.now();
File dataFile = SD.open("log.txt", FILE_WRITE);
if (dataFile) {
dataFile.print(now.hour());
dataFile.print(":");
dataFile.print(now.minute());
dataFile.print(":");
dataFile.print(now.second());
dataFile.print(" ");
dataFile.print(now.day());
dataFile.print("/");
dataFile.print(now.month());
dataFile.print("/");
dataFile.print(now.year());
dataFile.print(" - Temp(C): ");
dataFile.println(temperature);
dataFile.close();
Serial.println("Temperature and time logged.");
} else {
Serial.println("Error writing to SD card.");
}
}
// Display log on button press
if (digitalRead(BUTTON_PIN) == LOW) {
delay(200); // Debounce
File dataFile = SD.open("log.txt");
if (dataFile) {
Serial.println("Reading SD card contents:");
while (dataFile.available()) {
Serial.write(dataFile.read());
}
dataFile.close();
Serial.println("\n--- End of Log ---");
} else {
Serial.println("Error reading from SD card.");
}
}
}