restructured classes to provide sensor interface
This commit is contained in:
parent
ad8b07167b
commit
db1750ef53
4 changed files with 123 additions and 36 deletions
44
src/main.cpp
44
src/main.cpp
|
|
@ -1,44 +1,16 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <Wire.h>
|
#include <sensors/BmpSensor.h>
|
||||||
#include <Adafruit_BMP280.h>
|
|
||||||
|
|
||||||
Adafruit_BMP280 bmp; // use I2C interface
|
#define SLEEP_TIME 2
|
||||||
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
|
|
||||||
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
|
Sensor *bmpSensor;
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(112500);
|
bmpSensor = new BmpSensor();
|
||||||
while ( !Serial ) delay(100); // wait for native usb
|
|
||||||
|
|
||||||
unsigned status;
|
|
||||||
status = bmp.begin(0x76); //set the correct I2C port
|
|
||||||
|
|
||||||
//query status and reboot the board if no sensor is detected
|
|
||||||
if (!status) {
|
|
||||||
ESP.restart();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Default settings from datasheet. */
|
|
||||||
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. */
|
|
||||||
|
|
||||||
bmp_temp->printSensorDetails();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
sensors_event_t temp_event, pressure_event;
|
bmpSensor->sample();
|
||||||
bmp_temp->getEvent(&temp_event);
|
bmpSensor->enableStandbyMode();
|
||||||
bmp_pressure->getEvent(&pressure_event);
|
delay(SLEEP_TIME * 1000);
|
||||||
|
|
||||||
Serial.print(F("Temperature = "));
|
|
||||||
Serial.print(temp_event.temperature);
|
|
||||||
Serial.print(" *C | ");
|
|
||||||
|
|
||||||
Serial.print(F("Pressure = "));
|
|
||||||
Serial.print(pressure_event.pressure);
|
|
||||||
Serial.println(" hPa");
|
|
||||||
delay(100);
|
|
||||||
}
|
}
|
||||||
64
src/sensors/BmpSensor.cpp
Normal file
64
src/sensors/BmpSensor.cpp
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <Wire.h>
|
||||||
|
#include <Adafruit_BMP280.h>
|
||||||
|
#include "BmpSensor.h"
|
||||||
|
|
||||||
|
BmpSensor::BmpSensor() {
|
||||||
|
this->BmpSensor::sensor_setup();
|
||||||
|
this->state = SensorState::ASLEEP;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BmpSensor::sensor_setup() {
|
||||||
|
Serial.begin(112500);
|
||||||
|
while (!Serial) delay(100); // wait for native usb
|
||||||
|
|
||||||
|
unsigned status;
|
||||||
|
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();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default settings from datasheet. */
|
||||||
|
this->enableStandbyMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
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. */
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
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. */
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BmpSensor::sample() {
|
||||||
|
//wake sensor up if it is in standby mode
|
||||||
|
if (this->state == SensorState::ASLEEP)
|
||||||
|
this->wakeUp();
|
||||||
|
|
||||||
|
sensors_event_t temp_event, pressure_event;
|
||||||
|
this->bmp_temp->getEvent(&temp_event);
|
||||||
|
bmp_pressure->getEvent(&pressure_event);
|
||||||
|
|
||||||
|
Serial.print(F("Temperature = "));
|
||||||
|
Serial.print(temp_event.temperature);
|
||||||
|
Serial.print(" °C | ");
|
||||||
|
|
||||||
|
Serial.print(F("Pressure = "));
|
||||||
|
Serial.print(pressure_event.pressure);
|
||||||
|
Serial.println(" hPa");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
28
src/sensors/BmpSensor.h
Normal file
28
src/sensors/BmpSensor.h
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
#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();
|
||||||
|
|
||||||
|
void sample() override;
|
||||||
|
|
||||||
|
void enableStandbyMode() override;
|
||||||
|
|
||||||
|
void wakeUp() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void sensor_setup() override;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //NEW_CLIMTE_GO_BMPSENSOR_H
|
||||||
|
|
||||||
23
src/sensors/Sensor.h
Normal file
23
src/sensors/Sensor.h
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef NEW_CLIMTE_GO_SENSOR_H
|
||||||
|
#define NEW_CLIMTE_GO_SENSOR_H
|
||||||
|
|
||||||
|
enum class SensorState : unsigned short {
|
||||||
|
AWAKE, ASLEEP
|
||||||
|
};
|
||||||
|
|
||||||
|
class Sensor {
|
||||||
|
public:
|
||||||
|
virtual void 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue