#include <OneWire.h>
#include <DallasTemperature.h>
#include <SD.h>
#include <SPI.h>
// Pin assignments
const int oneWireBus = 2; // DS18B20 data pin
const int ldrPin = A0; // LDR analog output pin
const int chipSelect = 10; // SD card module CS pin
// DS18B20 setup
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
void setup() {
// Start serial communication
Serial.begin(9600);
// Start DS18B20
sensors.begin();
// Initialize SD card
if (!SD.begin(chipSelect)) {
Serial.println("SD card initialization failed!");
return;
}
Serial.println("SD card initialized.");
// Create or open the file on SD card and add headers if new
File dataFile = SD.open("data.csv", FILE_WRITE);
if (dataFile) {
dataFile.println("Timestamp,Temperature (C),Light Level");
dataFile.close();
} else {
Serial.println("Error opening data.csv");
}
}
void loop() {
// Request temperature data from DS18B20
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
// Read light intensity from LDR
int lightLevel = analogRead(ldrPin);
// Print to Serial Monitor for verification
Serial.print("Temperature (C): ");
Serial.print(temperatureC);
Serial.print(" | Light Level: ");
Serial.println(lightLevel);
// Log data to SD card
File dataFile = SD.open("data.csv", FILE_WRITE);
if (dataFile) {
// Use millis() as a basic timestamp
unsigned long timestamp = millis();
// Write to CSV file
dataFile.print(timestamp);
dataFile.print(",");
dataFile.print(temperatureC);
dataFile.print(",");
dataFile.println(lightLevel);
// Close file after writing
dataFile.close();
Serial.println("Data written to SD card.");
} else {
Serial.println("Error opening data.csv");
}
// Delay before next reading
delay(1000);
}