Files
TemperatureSensor/main.cpp
2018-11-26 22:30:39 +01:00

105 lines
2.0 KiB
C++

#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#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();
}
}