diff --git a/greenhouseheating.ino b/greenhouseheating.ino index 1198adf..1aaf281 100644 --- a/greenhouseheating.ino +++ b/greenhouseheating.ino @@ -2,7 +2,6 @@ #include #include // ArduinoThread #include // DHT Sensor Library by Adafruit 1.2.3 (!!! 1.3 not working) -#include // DS18B20 temp sensor #include // A basic DS1307 library that returns time as a time_t #include // Extended TM1637 library https://github.com/bremme/arduino-tm1637 @@ -195,4 +194,4 @@ void serStr(const char* serString) { Serial.write('/'); Serial.print(year()); Serial.println(); -} \ No newline at end of file +} diff --git a/greenhouseheating_light/greenhouseheating_light.ino b/greenhouseheating_light/greenhouseheating_light.ino new file mode 100644 index 0000000..9020750 --- /dev/null +++ b/greenhouseheating_light/greenhouseheating_light.ino @@ -0,0 +1,110 @@ +// Greenhouse heating system - Light version +#include +#include // ArduinoThread +#include // DHT Sensor Library by Adafruit 1.2.3 (!!! 1.3 not working) + +const byte relay = 2; // Relay PIN +#define DHTPIN 3 // PIN DHT + +DHT dht(DHTPIN, DHT11); // DHT-22 - AM2302 init + +int minTemp = 11; // Minimum temperature for relay (on) +int led = 13; +int maxTemp = 14; // Maximum temperature for relay (off) +long relayWorkingTime = 600000; // 10min - minimun working time + +int tempThreadMs = 10000; // checkTemp thread interval +int buttonThreadMs = 200; // pressButton thread interval +int buttonState = 0; // Button state +int buttonView = 0; // Button viewing state +int relayState = 0; // Relay state +long previousRelayChanged = 0; // Last time relay state changed +long buttonPressed = 0; // Button ms pressed counter +long previousButtonMillis = 0; // Last time button pressing +long buttonInterval = 10000; // Interval for highlighting 4-Digit Display after pressing button + +// Threads: +Thread checkTempThread = Thread(); // Create thread for temperature state checking + +void setup() { + Serial.begin(9600); // Initializes the Serial connection @ 9600 baud for debug + serStr("starting setup..."); + while (!Serial); // Wait until Arduino Serial Monitor opens + dht.begin(); + pinMode(led, OUTPUT); + pinMode(relay, OUTPUT); + digitalWrite(relay, HIGH); + // Button state cheking thread: + checkTempThread.onRun(checkTemp); + checkTempThread.setInterval(tempThreadMs); // Interval for checking temperature + delay(5000); // 5 second delay before display off and setup complete + serStr("...setup finished"); +} + +void loop() { + // Threads init: + if (checkTempThread.shouldRun()) + checkTempThread.run(); + // Check RTC. +} + +// Check temperature thread +void checkTemp() { + unsigned long currentMillis = millis(); + if (((currentMillis - previousRelayChanged) > relayWorkingTime) || (previousRelayChanged == 0)) { + float tempFloat; + readDHTtemp(&tempFloat); + if (tempFloat != tempFloat) { + serStr("TEMPERATURE is Not A Number"); + for (int i = 0; i < 23; i++) { + digitalWrite(relay, HIGH); + digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) + delay(333); // wait for a second + digitalWrite(led, LOW); // turn the LED off by making the voltage LOW + delay(444); + } + } else { + int tempInt = (int)tempFloat; + if ((tempInt < minTemp) && (relayState == 0)) { + serStr("low temperature - heating on"); + digitalWrite(relay, LOW); + previousRelayChanged = currentMillis; + relayState = 1; + } + if ((tempInt > maxTemp) && (relayState == 1)) { + serStr("high temperature - heating off"); + digitalWrite(relay, HIGH); + previousRelayChanged = currentMillis; + relayState = 0; + } + } + } + String string = ""; + String stringToPrint = ""; + float tempFloat; + float humFloat; + readDHTtemp(&tempFloat); + string = "TEMPERATURE "; + stringToPrint = string + tempFloat; + serStr(stringToPrint); +} + +// DHT Temperature +void readDHTtemp(float *a) { + float t = dht.readTemperature(); + *a = t; +} + +// DHT Humidity +void readDHThum(float *a) { + float h = dht.readHumidity(); + *a = h; +} + +// Send string to serial monitor with millis() counter and date/time +void serStr(String serString) { + long millisTime = millis(); + String delimiter = "|"; + String stringToPrint = millisTime + delimiter + serString; + Serial.println(stringToPrint); +}