/* YourDuino.com Example Software Sketch DHT11 Humidity and Temperature Sensor test Credits: Rob Tillaart http://arduino-direct.com/sunshop/index.php?l=product_detail&p=162 terry@yourduino.com */ /*-----( Import needed libraries )-----*/ #include #include #include #include /*-----( Declare objects )-----*/ dht11 DHT11; BMP085 bmp; /*-----( Declare Constants, Pin Numbers )-----*/ #define DHT11PIN 4 #define RF_IN 3 #define REDPIN 11 #define GREENPIN 12 volatile byte got_interval = 0; volatile byte interval = 0; volatile unsigned long old = 0, packet_count = 0; volatile unsigned long spacing, now, average_interval; WeatherSensorWH2 weather; ISR(TIMER1_COMPA_vect) { static byte count = 0; static byte was_hi = 0; if (digitalRead(RF_IN) == HIGH) { count++; was_hi = 1; } else { if (was_hi) { was_hi = 0; interval = count; got_interval = 1; count = 0; } } } void setup() /*----( SETUP: RUNS ONCE )----*/ { Serial.begin(9600); Serial.println("STATUS:START"); bmp.begin(); pinMode(REDPIN,OUTPUT); pinMode(GREENPIN,OUTPUT); pinMode(RF_IN, INPUT); TCCR1A = 0x00; TCCR1B = 0x09; TCCR1C = 0x00; OCR1A = 399; TIMSK1 = 0x02; sei(); }/*--(end setup )---*/ unsigned long previousMillis = 0; unsigned long indoor_interval = 60000; unsigned long outdoor_interval = 45000; unsigned long previousIndoor = 0; unsigned long previousOutdoor = 0; void loop() /*----( LOOP: RUNS CONSTANTLY )----*/ { byte i; byte *packet; if (got_interval) { weather.accept(interval); if (weather.acquired()) { now = millis(); spacing = now - old; old = now; packet_count++; average_interval = now / packet_count; /* Serial.print("Spacing: "); Serial.println(spacing, DEC); Serial.print("Packet count: "); Serial.println(packet_count, DEC); Serial.print("Average spacing: "); Serial.println(average_interval, DEC); packet = weather.get_packet(); for(i=0;i<5;i++) { Serial.print("0x"); Serial.print(packet[i], HEX); Serial.print("/"); Serial.print(packet[i], DEC); Serial.print(" "); } Serial.print("crc: "); Serial.print(weather.calculate_crc(), HEX); Serial.println((weather.valid() ? " OK" : " BAD")); */ if (weather.valid()) { Serial.print("SENSOR:TYPE=OUTDOOR,"); Serial.print("ID="); Serial.print(weather.get_sensor_id(), HEX); Serial.print(",HUMIDITY="); Serial.print(weather.get_humidity(), DEC); Serial.print(",TEMPERATURE="); Serial.println(weather.get_temperature_formatted()); previousOutdoor = millis(); digitalWrite(REDPIN,HIGH); } else { Serial.println("ERROR:OUTDOOR"); previousOutdoor = millis(); digitalWrite(REDPIN,LOW); } } got_interval = 0; } if ((unsigned long)(millis() - previousMillis) >= indoor_interval) { previousMillis = millis(); int chk = DHT11.read(DHT11PIN); if (chk==0) { Serial.print("SENSOR:TYPE=INDOOR,"); Serial.print("HUMIDITY="); Serial.println((float)DHT11.humidity, 2); // Serial.print(",TEMPERATURE="); // Serial.println((float)DHT11.temperature, 2); Serial.print("SENSOR:TYPE=BARO,"); Serial.print("PRESSURE="); Serial.print(bmp.readPressure()); Serial.print(",TEMPERATURE="); Serial.println(bmp.readTemperature()); previousIndoor = millis(); digitalWrite(GREENPIN,HIGH); } else { Serial.println("ERROR:INDOOR"); previousIndoor = millis(); digitalWrite(GREENPIN,LOW); } } if ((unsigned long)(millis() - previousIndoor) >= indoor_interval*10) { Serial.println("ERROR:INDOOR TIMEOUT"); previousIndoor = millis(); digitalWrite(GREENPIN,LOW); } if ((unsigned long)(millis() - previousOutdoor) >= outdoor_interval*10) { Serial.println("ERROR:OUTDOOR TIMEOUT"); previousOutdoor = millis(); digitalWrite(REDPIN,LOW); } }/* --(end main loop )-- */ /* ( THE END ) */