#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");
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
ntc1:GND
ntc1:VCC
ntc1:OUT
sd1:CD
sd1:DO
sd1:GND
sd1:SCK
sd1:VCC
sd1:DI
sd1:CS
rtc1:GND
rtc1:5V
rtc1:SDA
rtc1:SCL
rtc1:SQW