Data Logging Program Question

Hi all,

I have a question regarding an issue that I am running into. I am using an Arduino Uno, with the Adafruit Data logging shield (on board SD and RTC clock) and the AD595 thermocouple interface. The issue is with the combination of the two. Alone both of these are working correctly however when I try to combine the two, the data that is read is incorrect and not even a value that I can determine its origin. Basically I am using the Adafruit open source fridge temp and light code to do the data logging and want to incorporate the AD595 as the temperature source. I realize this is large and open question so I will continue to debug this project on my end, but any suggestions as to what to look at would be helpful. I suspect that for some reason I do not have permission to access the AD595 library source so the output I am seeing is wrong.

TOTAL PROJECT

#include <SD.h>
#include <Wire.h>
#include "RTClib.h"
#include <AD595.h> //Included to add 595 library for use in temp logging

#define LOG_INTERVAL  5000 // mills between entries (reduce to take more/faster data)

#define SYNC_INTERVAL 5000 // mills between calls to flush() - to write data to the card
uint32_t syncTime = 0; // time of last sync()

#define ECHO_TO_SERIAL   1 // echo data to serial port
#define WAIT_TO_START    0 // Wait for serial input in setup()

// the digital pins that connect to the LEDs
#define redLEDpin 2
#define greenLEDpin 3

// The analog pins that connect to the sensors
#define tempPin 0                // analog 0
#define BANDGAPREF 14            

#define aref_voltage 3.3         
#define bandgap_voltage 1.1     

RTC_DS1307 RTC; // define the Real Time Clock object
const int chipSelect = 10; //THis is the same as setting the pin=SS

// the logging file
File logfile;
AD595 thermocouple; //Define thermocouple

void error(char *str)
{
  Serial.print("error: ");
  Serial.println(str);
  
  // red LED indicates error, missing MEDIA
  digitalWrite(redLEDpin, HIGH);

  while(1);
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println();
  thermocouple.init(0); // Define that thermocuple input is A3
  
  // use debugging LEDs
  pinMode(redLEDpin, OUTPUT);
  pinMode(greenLEDpin, OUTPUT);
  
#if WAIT_TO_START
  Serial.println("Type any character to start");
  while (!Serial.available());
#endif //WAIT_TO_START

  // initialize the SD card
  Serial.print("ADA595 Initialize Success");
  Serial.print('\n');
  Serial.print("Initializing SD card...");
  pinMode(10, OUTPUT);
  
  if (!SD.begin(chipSelect)) {
    error("Card failed, or not present");
  }
  Serial.println("card initialized.");
  
  // create a new file
  char filename[] = "LOGGER00.CSV";
  for (uint8_t i = 0; i < 100; i++) {
    filename[6] = i/10 + '0';
    filename[7] = i%10 + '0';
    if (! SD.exists(filename)) {
      // only open a new file if it doesn't exist
      logfile = SD.open(filename, FILE_WRITE); 
      break;  // leave the loop!
    }
  }
  
  if (! logfile) {
    error("couldnt create file");
  }
  
  Serial.print("Logging to: ");
  Serial.println(filename);

  // connect to RTC
  Wire.begin();  
  if (!RTC.begin()) {
    logfile.println("RTC failed");
#if ECHO_TO_SERIAL
    Serial.println("RTC failed");
#endif  //ECHO_TO_SERIAL
  }
  logfile.println("seconds,stamp,datetime,temp,vcc");    
#if ECHO_TO_SERIAL
  Serial.println("seconds,stamp,datetime,temp,vcc");
#endif //ECHO_TO_SERIAL
 
  analogReference(EXTERNAL);
}

void loop(void)
{
  DateTime now;

  // delay for the amount of time we want between readings
  delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL));
  
  digitalWrite(greenLEDpin, HIGH);
  
  // log milliseconds since starting
  uint32_t m = millis();
  m = m/1000;
  int i = 0;
  i++;
  if (i > 0) {
    m=m+1;
  }
  logfile.print(m);           // milliseconds since start
  logfile.print(", ");    
#if ECHO_TO_SERIAL
  Serial.print(m);         // milliseconds since start
  Serial.print(", ");  
#endif

  // fetch the time
  now = RTC.now();
  // log time
  logfile.print(now.unixtime()); // seconds since 1/1/1970
  logfile.print(", ");
  logfile.print('"');
  logfile.print(now.year(), DEC);
  logfile.print("/");
  logfile.print(now.month(), DEC);
  logfile.print("/");
  logfile.print(now.day(), DEC);
  logfile.print(" ");
  logfile.print(now.hour(), DEC);
  logfile.print(":");
  if (now.minute() <= 9){ //used to pad single digit with 0
    logfile.print("0");
  }
  logfile.print(now.minute(), DEC);
  logfile.print(":");
  if (now.minute() <= 9){
	logfile.print("0");
  }
  logfile.print(now.second(), DEC);
  logfile.print('"');
  //Temperature READ SET
  //analogRead(tempPin); 
  delay(10);
  
  //int tempReading = analogRead(tempPin);    
  //converting that reading to voltage, for 3.3v arduino use 3.3, for 5.0, use 5.0
  //float temperatureC = tempReading * 100 / 1024;  
  //float temperatureF = (temperatureC * 9 / 5) + 32;
  float temperatureF = thermocouple.measure(TEMPF); // Re-defined temperatureF as a 
  					// response from ADA595
	
  
  logfile.print(", ");    
  logfile.print(temperatureF);

  // Log the estimated 'VCC' voltage by measuring the internal 1.1v ref
  analogRead(BANDGAPREF); 
  delay(10);
  int refReading = analogRead(BANDGAPREF); 
  float supplyvoltage = (bandgap_voltage * 1024) / refReading; 
  
  logfile.print(", ");
  logfile.print(supplyvoltage);

  logfile.println();

  digitalWrite(greenLEDpin, LOW);
  if ((millis() - syncTime) < SYNC_INTERVAL) return;
  syncTime = millis();
  digitalWrite(redLEDpin, HIGH);
  logfile.flush();
  digitalWrite(redLEDpin, LOW); 
}

AD595 DEMO

// Reads temperature from AD595 in fahrenheit.  Prints results to serial monitor.

#include <AD595.h>
AD595 thermocouple;
  
void setup() {
  Serial.begin(9600);
  thermocouple.init(0);
  
  Serial.println("AD595 test");
  // wait for AD595 chip to stabilize
  delay(500);
}

void loop() {
  // basic readout test, just print the current temp
  
   Serial.print("F = ");
   Serial.println(float(thermocouple.measure(TEMPF)));
 
   delay(1000);
}

AD595 Lib File

/*-----------------------------------------------------------------------------------------------
 * File: AD595.cpp
 * Function: AD595 Thermocouple library
 * Description: AD595 Type-K Thermocouple Library for the Hobbybotics AD595 breakout board.
 * Created by Curtis Brooks, May 13, 2012.
 * Updated: N/A
 * Released into the public domain.
 * 
 * ----------------------------------------------------------------------------------------------*/

// Add necessary include files
#include "AD595.h"
 
/*-----------------------------------------------------------------------------------------------
 * Public Methods
 * ----------------------------------------------------------------------------------------------*/

void AD595::init(uint8_t DO) {
  _DO = DO;
  
  //define pin modes
  pinMode(_DO, INPUT);
}

double AD595::measure(uint8_t type) {
  double value;
  
  switch(type) {
    case TEMPC : value = tempC(); break;
    case TEMPF : value = tempF(); break;
  }
  return value;
}

/*-----------------------------------------------------------------------------------------------
 * Private Methods
 * ----------------------------------------------------------------------------------------------*/
double AD595::tempC() {
  return (5.0 * analogRead(_DO) * 100.0) / 1024.0;
}

double AD595::tempF() {
  return ((tempC() * 9.0/5.0) + 32);
}

Please don't crosspost - that is, post the same message in multiple places.

Thanks
Moderator