Code: Select all
#include "DHT.h"
#include <Wire.h>
#include "Adafruit_BMP085.h"
#include "TSL2561.h"
#include "Adafruit_GPS.h"
#include "SD.h"
#if ARDUINO >= 100
#include <SoftwareSerial.h>
#else
#endif
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN,DHTTYPE);
Adafruit_BMP085 bmp;
TSL2561 tsl(TSL2561_ADDR_LOW);
#if ARDUINO >= 100
SoftwareSerial mySerial(3, 2);
#else
NewSoftSerial mySerial(3, 2);
#endif
Adafruit_GPS GPS(&mySerial);
#define GPSECHO false
const int chipSelect = 10;
boolean usingInterrupt = false;
const int dec_place = 100;
const int groundpin = 18; // analog input pin 4 -- ground
const int powerpin = 19; // analog input pin 5 -- voltage
const int xpin = A3; // x-axis of the accelerometer
const int ypin = A2; // y-axis
const int zpin = A1; // z-axis (only on 3-axis models)
void setup()
{
Serial.begin(115200);
Serial.println("Into Setup");
dht.begin();
Serial.println("DHT complete");
bmp.begin();
Serial.println("BMP complete");
pinMode(groundpin, OUTPUT);
pinMode(powerpin, OUTPUT);
digitalWrite(groundpin, LOW);
digitalWrite(powerpin, HIGH);
Serial.println("ADXL complete");
tsl.setGain(TSL2561_GAIN_16X);
tsl.setTiming(TSL2561_INTEGRATIONTIME_13MS);
tsl.begin();
Serial.println("TSL complete");
GPS.begin(9600);
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
Serial.println("GPS complete");
delay(1000);
mySerial.println(PMTK_Q_RELEASE);
Serial.println("Beginning SD test");
pinMode(10, OUTPUT);
if (!SD.begin(chipSelect)){
Serial.println("Recognition of SD card reader failed!");
return;
}
Serial.println("SD test complete");
String hdrstr = "Humidity (%)\tTemp (dht,*C)\tTemp (bmp,*C)\tPressure (hPa)\tAltitude (m)\tX Accel \tY Accel \tZ Accel \tIR\tFull\tVisible\tLux\tTime\tDate\tFix\tQuality\tLat\tLon\tSpeed (kt)\tAngle\tAltitude (ft)\tSatellites";
//Serial.println(hdrstr);
File hdrFile = SD.open("datalog.txt", FILE_WRITE);
if (hdrFile) {
hdrFile.println(hdrstr);
hdrFile.close();
Serial.println(hdrstr);
}else{
Serial.println("FAILURE!");
}
Serial.println("SD test complete");
}
uint32_t timer = millis();
void loop()
{
if (! usingInterrupt) {
// read data from the GPS in the 'main loop'
char c = GPS.read();
// if you want to debug, this is a good time to do it!
if (GPSECHO)
if (c) UDR0 = c;
// writing direct to UDR0 is much much faster than Serial.print
// but only one character can be written at a time.
}
// if a sentence is received, we can check the checksum, parse it...
if (GPS.newNMEAreceived()) {
// a tricky thing here is if we print the NMEA sentence, or data
// we end up not listening and catching other sentences!
// so be very wary if using OUTPUT_ALLDATA and trytng to print out data
//Serial.println(GPS.lastNMEA()); // this also sets the newNMEAreceived() flag to false
if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false
return; // we can fail to parse a sentence in which case we should just wait for another
}
if (timer > millis()) timer = millis();
// approximately every 5 seconds or so, print out the current stats
if (millis() - timer > 5000) {
Serial.println("INTO TIMER LOOP");
timer = millis(); // reset the timer
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
//Write DHT data to file
dataFile.print(dht.readHumidity());
dataFile.print("\t");
dataFile.print(dht.readTemperature());
dataFile.print("\t");
//Write BMP data to file
dataFile.print(bmp.readTemperature());
dataFile.print("\t");
dataFile.print(bmp.readPressure());
dataFile.print("\t");
dataFile.print(bmp.readAltitude());
dataFile.print("\t");
//Write ADXL data to file
dataFile.print(analogRead(xpin));
dataFile.print("\t");
dataFile.print(analogRead(ypin));
dataFile.print("\t");
dataFile.print(analogRead(zpin));
dataFile.print("\t");
//Write TSL data to file
uint32_t lum = tsl.getFullLuminosity();
uint16_t ir, full;
ir = lum >> 16;
full = lum & 0xFFFF;
dataFile.print(ir);
dataFile.print("\t");
dataFile.print(full);
dataFile.print("\t");
dataFile.print(full-ir);
dataFile.print("\t");
dataFile.println(tsl.calculateLux(full, ir));
dataFile.print("\t");
//Write GPS data to file
dataFile.print(GPS.hour);
dataFile.print(":");
dataFile.print(GPS.minute);
dataFile.print(":");
dataFile.print(GPS.seconds);
dataFile.print(".");
dataFile.print(GPS.milliseconds);
dataFile.print("\t");
dataFile.print(GPS.day);
dataFile.print("/");
dataFile.print(GPS.month);
dataFile.print("/20");
dataFile.print(GPS.year);
dataFile.print("\t");
dataFile.print((int)GPS.fix);
dataFile.print("\t");
if (GPS.fix) {
Serial.println("Fix Achieved!");
dataFile.print((int)GPS.fixquality);
dataFile.print("\t");
dataFile.print(GPS.latitude);
dataFile.print("\t");
dataFile.print(GPS.lat);
dataFile.print("\t");
dataFile.print(GPS.longitude);
dataFile.print("\t");
dataFile.print(GPS.lon);
dataFile.print("\t");
dataFile.print(GPS.speed);
dataFile.print("\t");
dataFile.print(GPS.angle);
dataFile.print("\t");
dataFile.print(GPS.altitude);
dataFile.print("\t");
dataFile.println(GPS.satellites);
}else {
dataFile.println(GPS.fixquality);
}
dataFile.close();
Serial.println("Wrote to file");
}
}
}