#include #include #include #include #include #include "dht11.h" #include "W433DataTransmitter.h" #include "watchdog.h" #include "softspim.h" #include "BMP280.h" #include "comperator.h" #define TEMP_SENSOR_DATA PB4 #define TRANSMITTER_DATA PD0 #define DOOR_PIN PD2 #define POWER_PIN PD5 #define LED_PIN PD1 EMPTY_INTERRUPT(WDT_OVERFLOW_vect); static constexpr uint8_t id = 4; static constexpr bool WATCH_DOOR = false; static constexpr bool BMP_280 = false; static constexpr bool DHT22 = true; static void power(const bool power) { if(power) { PORTD |= 1 << POWER_PIN | 1 << LED_PIN; DDRD = 1 << POWER_PIN | 1 << LED_PIN | 1 << TRANSMITTER_DATA; DDRB = 1 << PB0 | 1 << PB3; } else { PORTD &= ~(1 << POWER_PIN | 1 << LED_PIN | 1 << TRANSMITTER_DATA); DDRB = 0; } } void debugBlink(bool fast = true) { _delay_ms(100); if(!fast) _delay_ms(200); PORTD &= ~(1 << LED_PIN); _delay_ms(100); if(!fast) _delay_ms(200); PORTD |= 1 << LED_PIN; } int main() { Dht11 tempSensor(&PORTB, &PINB, &DDRB, TEMP_SENSOR_DATA); //pressure sensor SpiMaster spi; BMP280 pressSensor(&spi, &PORTB, PB1); //Transmitter and transmiter power W433DataTransmitter transmiter(&PORTD, TRANSMITTER_DATA); Comperator comp; sei(); WDTCSR = 1< 80) { couter = 0; power(true); comp.on(); for(uint8_t i = 0; i < 20; ++i) { debugBlink(); } PORTD &= ~(1 << LED_PIN); uint8_t paket[4] = {0}; paket[1] = id; //temperature sensor if constexpr (DHT22) { //debugBlink(false); tempSensor.read(); paket[0] = 1; paket[2] = tempSensor.temperature >> 8; paket[3] = tempSensor.temperature; transmiter.send(paket, 4); } //humidity sensor if constexpr (DHT22) { //debugBlink(false); paket[0] = 2; paket[2] = tempSensor.humidity >> 8; paket[3] = tempSensor.humidity; transmiter.send(paket, 4); } //low battery waring if(comp.compare()) { //debugBlink(false); paket[0] = 128; paket[2] = 0; paket[3] = id; transmiter.send(paket, 4); } //presure sensor if constexpr(BMP_280) { //debugBlink(false); uint16_t pressure = pressSensor.getPressure(); paket[0] = 3; paket[2] = pressure >> 8; paket[3] = pressure; transmiter.send(paket, 4); } //door if constexpr(WATCH_DOOR) { //debugBlink(false); paket[0] = 0; paket[1] = 2; paket[2] = 0; paket[3] = readPin(&PIND, DOOR_PIN); transmiter.send(paket, 4); } comp.off(); power(false); } sleep_mode(); } }