#include #define DHTPIN1 8 #define DHTPIN2 9 #define out1 11//0 //output to hbridge #define out2 10//1 //output to hbridge #define LED 12 //LED connected to indicate when power is available. #define OPENED 1 #define CLOSED 0 #define indexDifferenceOpenThreshold 0.6 #define indexDifferenceCloseThreshold -0.3 #define numberOfReadingsToAverageOver 3 #define DHTTYPE DHT22 // DHT 22 (AM2302) // Connect a resistor from pin 2 (data) to pin 1 (power) of the sensor. Or alternatively, enable the pullup resistor in the chip. DHT dht1(DHTPIN1, DHTTYPE); DHT dht2(DHTPIN2, DHTTYPE); int openClose = CLOSED; //initialize default window state as closed. void setup() { Serial.begin(115200); Serial.println("DHTxx test!"); pinMode(DHTPIN1, INPUT_PULLUP); pinMode(DHTPIN2, INPUT_PULLUP); pinMode(out1, OUTPUT); pinMode(out2, OUTPUT); pinMode(LED,OUTPUT); dht1.begin(); dht2.begin(); digitalWrite(LED, HIGH); pwmReverse(15,300); //pwmForward(15,300); //pwmReverse(15,400+5); } void loop() { // Reading temperature or humidity takes about 250 milliseconds //We will average over 3 readings to account for transients in winds and air currents that //could cause a brief change in temperature and humidity. float humid1=0.0, temp1=0.0, heatx1avg=0.0; float humid2=0.0, temp2=0.0, heatx2avg=0.0; float indexDifference = 0.0; for(int i=0; i=indexDifferenceOpenThreshold && openClose==CLOSED){ int openByAmount=indexDifference*50; if(openByAmount>=800){ openByAmount=800; } //pwmForward(15,openByAmount); pwmForward(15,400); openClose = OPENED; } else if(indexDifference<=indexDifferenceCloseThreshold && openClose==OPENED){ pwmReverse(15,400+20); openClose = CLOSED; } else{ goToSleepMode(); } } void openBy1Level(){ pwmForward(15,100); } void closeBy1Level(){ pwmReverse(15,100+5); //add 5 for safety margin. } void openBy2Levels(){ pwmForward(15,200); } void closeBy2Levels(){ pwmReverse(15,200+5); } void pwmForward(int delayTime, int duration){ digitalWrite(out2,LOW); for(int i=0;i