#include <Wire.h>
#include <RTClib.h>
#include <SPI.h>
#include <SD.h>
#define TEMPERATURE_PIN A0
#define LOG_INTERVAL 900
#define CHIP_SELECT 10
RTC_DS1307 rtc;
File logFile;
unsigned long lastLogTime;
float temperatureValues[96]; // Array to store temperature values for the last 24 hours
int numReadings = 0; // Number of temperature readings in the array
void setup() {
Serial.begin(9600);
pinMode(TEMPERATURE_PIN, INPUT);
if (!rtc.begin()) {
Serial.println("RTC_DS1307 failed to initialize");
}
if (!SD.begin(CHIP_SELECT)) {
Serial.println("MicroSD card failed to initialize");
}
lastLogTime = 0;
}
void loop() {
DateTime now = rtc.now();
float temperature = getTemperature();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" C, Time: ");
Serial.print(now.year());
Serial.print("/");
Serial.print(now.month());
Serial.print("/");
Serial.print(now.day());
Serial.print(" ");
Serial.print(now.hour());
Serial.print(":");
Serial.print(now.minute());
Serial.print(":");
Serial.println(now.second());
unsigned long currentTime = now.unixtime();
if (currentTime - lastLogTime >= LOG_INTERVAL) {
lastLogTime = currentTime;
logTemperature(temperature, now);
temperatureValues[numReadings] = temperature; // Store temperature value in the array
numReadings++;
if (numReadings == 96) { // If the array is full (24 hours have passed), start overwriting the oldest values
numReadings = 0;
}
}
delay(1000);
}
float getTemperature() {
int reading = analogRead(TEMPERATURE_PIN);
float voltage = reading * 5.0 / 1023.0;
float resistance = (5.0 - voltage) * 10000.0 / voltage;
float temperature = 1.0 / (log(resistance / 10000.0) / 3975.0 + 1.0 / 298.15) - 273.15;
return temperature;
}
void logTemperature(float temperature, DateTime now) {
String filename = String(now.year()) + String(now.month()) + String(now.day()) + ".txt";
logFile = SD.open(filename, FILE_WRITE);
if (logFile) {
logFile.print(now.year());
logFile.print("/");
logFile.print(now.month());
logFile.print("/");
logFile.print(now.day());
logFile.print(" ");
logFile.print(now.hour());
logFile.print(":");
logFile.print(now.minute());
logFile.print(":");
logFile.print(now.second());
logFile.print(",");
logFile.println(temperature);
logFile.close();
Serial.println("Temperature logged to microSD card");
} else {
Serial.println("Error opening log file");
}
}