restructured project

This commit is contained in:
Clemens-Dautermann 2022-02-06 19:38:01 +01:00 committed by Clemens-Dautermann
parent 87fd0f35f6
commit 7515726a8f
14 changed files with 5 additions and 1 deletions

View file

@ -0,0 +1,89 @@
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_BMP280.h>
#include "BmpSensor.h"
/**
* Creates a new BMP Sensor and initializes it
*/
BmpSensor::BmpSensor() {
this->BmpSensor::sensor_setup();
this->state = SensorState::ASLEEP;
}
/**
* Function responsible for setting up the sensor and the I2C connection
*/
void BmpSensor::sensor_setup() {
while (!Serial) delay(100); // wait for native usb
unsigned status = this->bmp.begin(0x76); //set the correct I2C port
//query status and reboot the board if no sensor is detected
if (!status)
ESP.restart();
//put sensor to standby mode
this->enableStandbyMode();
}
/**
* Function to wake sensor up from standby mode
*/
void BmpSensor::wakeUp() {
this->bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500 /* Standby time. */
);
}
/**
* Function to put sensor to standby mode
*/
void BmpSensor::enableStandbyMode() {
this->bmp.setSampling(Adafruit_BMP280::MODE_SLEEP, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500 /* Standby time. */
);
}
/**
* read a sample from the sensor
* @return a struct containing all necessary sensor data
*/
sensor_data_t BmpSensor::sample() {
//wake sensor up if it is in standby mode
if (this->state == SensorState::ASLEEP)
this->wakeUp();
//sample pressure and temperature
sensors_event_t temp_event, pressure_event;
this->bmp_temp->getEvent(&temp_event);
this->bmp_pressure->getEvent(&pressure_event);
return sensor_data_t
{
temp_event.temperature,
pressure_event.pressure
};
}
/**
* Read a sample and put sensor to standby mode.
* !!! Do not use this if sampling time is <= 500ms !!!
* @return the sample read
*/
sensor_data_t BmpSensor::sampleLowEnergy() {
//read sample
sensor_data_t sampledData = this->sample();
//put sensor to standby
this->enableStandbyMode();
return sampledData;
}

View file

@ -0,0 +1,29 @@
#ifndef NEW_CLIMTE_GO_BMPSENSOR_H
#define NEW_CLIMTE_GO_BMPSENSOR_H
#include "Sensor.h"
#include "Adafruit_BMP280.h"
class BmpSensor : public Sensor {
private:
Adafruit_BMP280 bmp; // use I2C interface
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
public:
BmpSensor();
sensor_data_t sample() override;
sensor_data_t sampleLowEnergy();
void enableStandbyMode() override;
void wakeUp() override;
protected:
void sensor_setup() override;
};
#endif //NEW_CLIMTE_GO_BMPSENSOR_H

View file

@ -0,0 +1,25 @@
#ifndef NEW_CLIMTE_GO_SENSOR_H
#define NEW_CLIMTE_GO_SENSOR_H
#include <sensors/sensor_data_t.h>
enum class SensorState : unsigned short {
AWAKE, ASLEEP
};
class Sensor {
public:
virtual sensor_data_t sample() = 0;
virtual void wakeUp() = 0;
virtual void enableStandbyMode() = 0;
protected:
SensorState state = SensorState::ASLEEP;
virtual void sensor_setup() = 0;
};
#endif //NEW_CLIMTE_GO_SENSOR_H

View file

@ -0,0 +1,16 @@
#ifndef NEW_CLIMTE_GO_SENSOR_DATA_T_H
#define NEW_CLIMTE_GO_SENSOR_DATA_T_H
#include <types.h>
/**
* This struct represents data read from any sensor.
* This implies, reading temperature from e.g. the CO2 Sensor
* does not make any sense
*/
struct sensor_data_t {
float temperature;
float pressure;
};
#endif