

// From Adafruit example part


#include <Wire.h>  // default I2C Arduino library
#include <SPI.h>   // default SPI Arduino library
#include <SD.h>    // original SD library changed to Adafruit SD library
#include <RTClib.h> // RTClib Adafruit library, DS1307 used
#include <Adafruit_Sensor.h> // Sensor Adafruit library
#include <Adafruit_BME280.h> //BME280 library


//for RTC

RTC_DS1307 rtc;

//end RTC

// for SD card
const int chipSelect = 4; //GPIO pin4 SD card CS
File dataFile;
// end SD card

//for BME280 sensor
//#define BME_SCK 13
//#define BME_MISO 12
//#define BME_MOSI 11
//#define BME_CS 10

//#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO,  BME_SCK);

float Temp;
float Humidity;
float Pressure;

// End BME280

//Analog inputs

int AnalogA0 = A0;
//int AnalogA1 = A1;
//int AnalogA2 = A2;
//int AnalogA3 = A3;
//int AnalogA4 = A4;  used SDA
//int AnalogA5 = A5;  used SCL

void setup() {
  
  Serial.begin(9600);  //open serial port
  
 //Test and init for BME280
 // Serial.println("BME280 test");

   if (!bme.begin()) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    //while (1);
  } else Serial.println("BME280 sensor found!");
delay(100);

 //Test and init for RTC DS1307
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    //while (1);
    } else Serial.println("RTC found!");

     if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!Check battery!");
    // following line sets the RTC to the date & time this sketch was compiled
   // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  } else Serial.println("RTC is running!");
delay (100);

//Test and init for SD card
  Serial.print("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(SS, OUTPUT);
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    //while (1) ;
  } else Serial.println("Card present and initialized");
    delay (100);
  
  // Open up the file we're going to log to!
  dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (! dataFile) {
    Serial.println("error opening datalog.txt");
    // Wait forever since we cant write data
    //while (1) ;
    delay(100);
  } else Serial.println("Writing datalog.txt is OK");
// }
  
}

//main()
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(daysOfTheWeek[now.dayOfTheWeek()]);
    //Serial.print(") ");
    //Serial.print('/');    
    //Serial.print(now.hour(), DEC);
    //Serial.print(':');
    //Serial.print(now.minute(), DEC);
    //Serial.print(':');
    //Serial.print(now.second(), DEC);
    //Serial.println();
    
 // make a string for assembling the data to log:
  String dataString = "";
//Serial.print("DATA,TIME,");
                                                 dataString += String("DATA,TIME,"); // add custom commands for PLX-DAQ PC logging
                                                 
int   Year = (now.year());                       dataString += String(Year);         dataString += ",";
int   Month = (now.month());                     dataString += String(Month);        dataString += ",";
int   Day = (now.day());                         dataString += String(Day);          dataString += ",";
int   Hour = (now.hour());                       dataString += String(Hour);         dataString += ",";
int   Minute = (now.minute());                   dataString += String(Minute);       dataString += ",";
int   Second = (now.second());                   dataString += String(Second);       dataString += ",";
 
float Temperature = (bme.readTemperature());     dataString += String(Temperature);  dataString += ",";    //Serial.print(Temperature); Serial.print(",");
float Humidity = (bme.readHumidity());           dataString += String(Humidity);     dataString += ",";    //   Serial.print(Humidity); Serial.print(",");
float Pressure = (bme.readPressure() / 100.0F);  dataString += String(Pressure);     dataString += ",";    //   Serial.print(Pressure); Serial.print(",");
int   Read_VCC33 = analogRead(AnalogA0);         
float VCC33 = Read_VCC33 * (5.0 / 1023.0);             dataString += String(VCC33);                         //Serial.print(VCC33); //System health check

dataFile.println(dataString); // send data to SD card buffer
Serial.println(dataString); // send String to Serial too
dataFile.flush(); // Save to card and clean buffer
//Serial.println();

    delay(5000);
}

