I've build a simple program controlling a relay depending on humidity (DHT11 sensor). Now I want to log the sensor values and have bought and installed a SDshield. The shield works fine with the example programs (datalogger, cardinfo) but when I use my own bit of code, it fails to open the file for writing. The compiler does not give any error messages and I have looked the code over a dussin times. To my rather untrained eyes everything seems to be in order, but obviously it's not. I would be greatful for any help. What am I missing here?
My program:
#include "DHT.h"
#define DHTPIN 7 //pin för sensor output
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include <SD.h>
const int chipSelect = 4;
#define RELAY_ON 1
#define RELAY_OFF 0
#define RELAY_1 2 //pin för relä 1
void setup() {
Serial.begin(9600);
dht.begin();
Serial.println("Welcome to Mushroom Incubator!");
Serial.print("Initializing SD card...");
pinMode(10, OUTPUT);
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized.");
pinMode(RELAY_1, OUTPUT);
digitalWrite(RELAY_1, RELAY_OFF);
}
void loop() {
delay(2000); //vänta 2 sec mellan mätningar
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
//bygg ev. dataString här...
File HumidityLog = SD.open("HumidityLog.txt", FILE_WRITE);
if (HumidityLog) {
HumidityLog.print(h);
HumidityLog.println(",");
HumidityLog.close();
}
else {
Serial.println("error opening HumidityLog.txt");
}
File TemperatureLog = SD.open("TemperatureLog.txt", FILE_WRITE);
if (TemperatureLog) {
TemperatureLog.print(t);
TemperatureLog.println(",");
TemperatureLog.close();
}
else {
Serial.println("error opening TemperatureLog.txt");
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C ");
if (h < 70) {
Serial.println("Humidity LOW, relay switched ON");
digitalWrite(RELAY_1, RELAY_ON);
delay(3000); //kör i X sec
Serial.println("Relay switched OFF, waiting for new sensor values");
Serial.println("");
digitalWrite(RELAY_1, RELAY_OFF); //stäng av, vänta på ny sensor output
}
else {
Serial.println("Humidity HIGH, relay switched OFF");
Serial.println(" ");
digitalWrite(RELAY_1, RELAY_OFF);
}
}