#include #include #include #include #include #include "dht11.h" #include "W433DataTransmitter.h" #include "watchdog.h" #include "softspim.h" #include "BMP280.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 = 1; static constexpr bool WATCH_DOOR = false; 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 << PB1 | 1 << PB3; } else { PORTD &= ~(1 << POWER_PIN | 1 << LED_PIN | 1 << TRANSMITTER_DATA); //DDRD &= ~(1 << TRANSMITTER_DATA); DDRB = 0; } } 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); sei(); wdt_set(WDTO_8S); set_sleep_mode(SLEEP_MODE_PWR_DOWN); uint8_t couter = 50; while(true) { if(++couter > 1) { couter = 0; power(true); _delay_ms(2000); //temperature sensor tempSensor.read(); uint8_t paket[4]; paket[0] = 1; paket[1] = id; paket[2] = tempSensor.temperature >> 8; paket[3] = tempSensor.temperature; transmiter.send(paket, 4); //humidity sensor paket[0] = 2; paket[2] = tempSensor.humidity >> 8; paket[3] = tempSensor.humidity; transmiter.send(paket, 4); //presure sensor uint16_t pressure = pressSensor.getPressure(); paket[0] = 3; paket[2] = pressure >> 8; paket[3] = pressure; transmiter.send(paket, 4); //door if constexpr(WATCH_DOOR) { paket[0] = 0; paket[1] = 2; paket[2] = 0; paket[3] = readPin(&PIND, DOOR_PIN); transmiter.send(paket, 4); } power(false); } sleep_mode(); } }