#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include "DHTesp.h"
#include "RTClib.h"

DHTesp dht;
Adafruit_BMP280 bme;
RTC_DS1307 RTC;
File myFile;

String nameString = "";
String dataString = "";
String separator = ", ";

void setup() {
  Serial.begin(9600);
  dht.setup(D0, DHTesp::DHT11);
  bme.begin();

  Wire.begin(); // Start the I2C
  RTC.begin();  // Init RTC
  RTC.adjust(DateTime(__DATE__, __TIME__));  // Time and date is expanded to date and time on your computer at compiletime
  Serial.print('Time and date set');

  DateTime now = RTC.now();
  nameString = String(now.year()) + "_" + String(now.month()) + "_" + String(now.day()) + "_" + String(now.hour()) + "_" + String(now.minute()) + "_" + String(now.second()) + ".txt";
  SD.begin(D8);
}

void loop() {

  DateTime now = RTC.now();
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(' ');
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();

  float h = dht.getHumidity();
  //float t = dht.getTemperature();

  Serial.print("Humidity = ");
  Serial.println(h);

  Serial.print("Temperature = ");
  Serial.print(bme.readTemperature());
  Serial.println(" C");

  Serial.print("Pressure = ");
  Serial.print(bme.readPressure());
  Serial.println(" Pa");

  Serial.print("Approx altitude = ");
  Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
  Serial.println(" m");

  Serial.println();

  dataString = String(now.hour()) + separator + String(now.minute()) + separator + String(now.second()) + separator + String(h) + separator + String(bme.readTemperature()) + separator + String(bme.readPressure()) + separator + String(bme.readAltitude(1013.25)) ;
  Serial.println(nameString);
  Serial.println();

  myFile = SD.open(nameString, FILE_WRITE);
  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println(dataString);
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

  delay(500);
}
