#include <RTClib.h>
#include <SdFat.h>
#include <LiquidCrystal.h>
#include <DHT.h>
#define DHTPIN_1 A0
#define DHTPIN_2 A1
#define DHTPIN_3 A2
#define DHTPIN_4 A3
#define DHTPIN_5 2
#define DHTPIN_6 3
#define DHTTYPE DHT22
DHT dht_1(DHTPIN_1, DHTTYPE);
DHT dht_2(DHTPIN_2, DHTTYPE);
DHT dht_3(DHTPIN_3, DHTTYPE);
DHT dht_4(DHTPIN_4, DHTTYPE);
DHT dht_5(DHTPIN_5, DHTTYPE);
DHT dht_6(DHTPIN_6, DHTTYPE);
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
const int chipSelect = 10;
const int interval = 10000;
RTC_DS1307 rtc;
SdFat SD;
DateTime lastFileTime;
String filename = "";
File dataFile;
void setup() {
Serial.begin(9600);
while (!Serial) {
; // Wait for serial port to connect. Needed for native USB port only
}
dht_1.begin();
dht_2.begin();
dht_3.begin();
dht_4.begin();
dht_5.begin();
dht_6.begin();
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized.");
lcd.begin(16, 2);
DateTime now = rtc.now();
lastFileTime = DateTime(now.year(), now.month(), now.day());
}
void loop() {
DateTime now = rtc.now();
float temperature_1 = dht_1.readTemperature();
float temperature_2 = dht_2.readTemperature();
float temperature_3 = dht_3.readTemperature();
float temperature_4 = dht_4.readTemperature();
float temperature_5 = dht_5.readTemperature();
float temperature_6 = dht_6.readTemperature();
if (isnan(temperature_1) || isnan(temperature_2) || isnan(temperature_3) ||
isnan(temperature_4) || isnan(temperature_5) || isnan(temperature_6)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Temp1: ");
Serial.print(temperature_1);
Serial.print(" *C\t");
Serial.print("Temp2: ");
Serial.print(temperature_2);
Serial.print(" *C\t");
Serial.print("Temp3: ");
Serial.print(temperature_3);
Serial.println(" *C\t");
Serial.print("Temp4: ");
Serial.print(temperature_4);
Serial.print(" *C\t");
Serial.print("Temp5: ");
Serial.print(temperature_5);
Serial.print(" *C\t");
Serial.print("Temp6: ");
Serial.print(temperature_6);
Serial.println(" *C");
if (now.hour() == lastFileTime.hour() && now.minute() == lastFileTime.minute() && now.second() == lastFileTime.second()) {
// File is already open, just write data
dataFile.print(now.timestamp());
dataFile.print(",");
dataFile.print(temperature_1);
dataFile.print(",");
dataFile.print(temperature_2);
dataFile.print(",");
dataFile.print(temperature_3);
dataFile.print(",");
dataFile.print(temperature_4);
dataFile.print(",");
dataFile.print(temperature_5);
dataFile.print(",");
dataFile.println(temperature_6);
dataFile.close();
Serial.println("Data logged.");
} else {
// New file, create a new CSV file
filename = String(now.year()) + "_" + String(now.month()) + "_" + String(now.day()) + ".csv";
dataFile = SD.open(filename, FILE_WRITE);
if (dataFile) {
lastFileTime = now;
dataFile.print(now.timestamp());
dataFile.print(",");
dataFile.print(temperature_1);
dataFile.print(",");
dataFile.print(temperature_2);
dataFile.print(",");
dataFile.print(temperature_3);
dataFile.print(",");
dataFile.print(temperature_4);
dataFile.print(",");
dataFile.print(temperature_5);
dataFile.print(",");
dataFile.println(temperature_6);
dataFile.close();
Serial.println("Data logged.");
} else {
Serial.println("Error creating new CSV file");
}
}
// Display readings from sensors 1, 2, 3 on the top row
lcd.setCursor(0, 0);
lcd.print(temperature_1, 1);
lcd.print(" ");
lcd.print(temperature_2, 1);
lcd.print(" ");
lcd.print(temperature_3, 1);
// Display readings from sensors 4, 5, 6 on the bottom row
lcd.setCursor(0, 1);
lcd.print(temperature_4, 1);
lcd.print(" ");
lcd.print(temperature_5, 1);
lcd.print(" ");
lcd.print(temperature_6, 1);
delay(interval);
}