//sensor library
#include "DHT.h"
//display library
#include <LiquidCrystal.h>
//#include <SQLAPI.h>
#include<string>
#define DHT_PIN 15 //sensor pin
#define DIR_PIN 2 //pin determining direction of motor spin
#define STEP_PIN 3 //pin starting motor spin
#define DHT_TYPE DHT22//type of sensor
//LED pins
#define OK_LED 18
#define NOT_OK_LED 20
#define HEAT 19
//temperature and humidity sensor
DHT dht(DHT_PIN, DHT_TYPE);
//LCD
LiquidCrystal lcd(12,11,10,9,8,7);
void setup() {
//starting the sensor
dht.begin();
//starting the display with 16 columns and 2 rows
lcd.begin(16,2);
//motor setup
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
digitalWrite(STEP_PIN, LOW);
}
void loop() {
//on call reset display
lcd.clear();
//read stats
int temperature = dht.readTemperature();
int humidity = dht.readHumidity();
printStats(humidity, temperature);
//query database
executeQuery();
//check conditions
bool normalCond = ((temperature >=22 && temperature<=35) && (humidity<=50)) ? true : false;
if(normalCond)
{
//good conditions = OK led lights up, the others don't
digitalWrite(OK_LED, HIGH);
digitalWrite(NOT_OK_LED, LOW);
digitalWrite(HEAT, LOW);
}
if(!normalCond)
{
//bad conditions = OK led turns off, depending on conditions others light up
digitalWrite(OK_LED, LOW);
digitalWrite(NOT_OK_LED, HIGH);
if(temperature<22 || humidity>50)
{
digitalWrite(HEAT, HIGH);
}
if(temperature>35)
{
digitalWrite(DIR_PIN,HIGH);
//temp too high, turn on motor
while(temperature>35)
{
temperature = dht.readTemperature();
digitalWrite(STEP_PIN, HIGH);
digitalWrite(STEP_PIN, LOW);
delay(1);
}
}
}
delay(1000);
}
void printStats(int humidity,int temperature)
{
lcd.setCursor(1,0);
lcd.print("H:");
lcd.print(humidity);
lcd.print("% ");
lcd.print("Temp:");
lcd.print(temperature);
lcd.print("C");
}
//sample query to database
int executeQuery(const std::string& product)
{
lcd.print("Loading...");
/*
SAConnection con;
try{
con.Connect("storage", "user", "*****", SA_Oracle_Client);
SACommand select(&con);
select.setCommand("SELECT * FROM products WHERE productName = :1");
select.Param(1).setAsString() = product.c_str();
select.Execute();
int quantity = select.Field("quantity");
con.Disconnect();
lcd.print(quantity);
}
catch(SAException &x)
{
con.Rollback();
}
*/
}
void executeQuery(){
lcd.setCursor(1,1);
lcd.print("Loading...");
}