mirror of
https://github.com/xoseperez/espurna.git
synced 2026-03-10 10:17:05 +01:00
Playing with the sensor interrupt routines
This commit is contained in:
@@ -153,7 +153,7 @@
|
||||
#endif
|
||||
|
||||
#define COUNTER_REPORT_EVERY 12 // Report counter every this updates (1 minute)
|
||||
#define COUNTER_DEBOUNCE 10 // Do not register events within less than 10 millis
|
||||
#define COUNTER_DEBOUNCE 50 // Do not register events within less than 10 millis
|
||||
#define COUNTER_TOPIC "counter" // Default topic for MQTT, API and InfluxDB
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
|
||||
@@ -88,7 +88,7 @@ String _sensorUnits(magnitude_t type) {
|
||||
if (type == MAGNITUDE_POWER_FACTOR) return String("%");
|
||||
if (type == MAGNITUDE_ENERGY) return String("J");
|
||||
if (type == MAGNITUDE_ENERGY_DELTA) return String("J");
|
||||
if (type == MAGNITUDE_EVENTS) return String("/m");
|
||||
if (type == MAGNITUDE_EVENTS) return String("/min");
|
||||
if (type == MAGNITUDE_PM1dot0) return String("µg/m3");
|
||||
if (type == MAGNITUDE_PM2dot5) return String("µg/m3");
|
||||
if (type == MAGNITUDE_PM10) return String("µg/m3");
|
||||
@@ -185,14 +185,22 @@ void _sensorPost() {
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Interrupts
|
||||
// -----------------------------------------------------------------------------
|
||||
#if COUNTER_SUPPORT
|
||||
|
||||
unsigned char _event_sensor_id = 0;
|
||||
void isrEventSensor() {
|
||||
_sensors[_event_sensor_id]->InterruptHandler();
|
||||
}
|
||||
|
||||
#endif // COUNTER_SUPPORT
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Values
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void sensorISR() {
|
||||
_sensors[_sensor_isr]->InterruptHandler();
|
||||
}
|
||||
|
||||
void sensorRegister(BaseSensor * sensor) {
|
||||
_sensors.push_back(sensor);
|
||||
}
|
||||
@@ -220,11 +228,6 @@ unsigned char magnitudeType(unsigned char index) {
|
||||
return MAGNITUDE_NONE;
|
||||
}
|
||||
|
||||
void sensorInterrupt(unsigned char sensor_id, unsigned char gpio, int mode) {
|
||||
_sensor_isr = sensor_id;
|
||||
attachInterrupt(gpio, sensorISR, mode);
|
||||
}
|
||||
|
||||
void sensorInit() {
|
||||
|
||||
#if DHT_SUPPORT
|
||||
@@ -273,11 +276,10 @@ void sensorInit() {
|
||||
#endif
|
||||
|
||||
#if COUNTER_SUPPORT
|
||||
if (_sensor_isr == 0xFF) {
|
||||
#include "sensors/EventSensor.h"
|
||||
sensorRegister(new EventSensor(COUNTER_PIN, COUNTER_PIN_MODE, COUNTER_DEBOUNCE));
|
||||
sensorInterrupt(sensorCount()-1, COUNTER_PIN, COUNTER_INTERRUPT_MODE);
|
||||
}
|
||||
#include "sensors/EventSensor.h"
|
||||
sensorRegister(new EventSensor(COUNTER_PIN, COUNTER_PIN_MODE, COUNTER_DEBOUNCE));
|
||||
_event_sensor_id = sensorCount() - 1;
|
||||
attachInterrupt(COUNTER_PIN, isrEventSensor, COUNTER_INTERRUPT_MODE);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ class BaseSensor {
|
||||
~BaseSensor() {}
|
||||
|
||||
// General interrupt handler
|
||||
void InterruptHandler() {}
|
||||
virtual void InterruptHandler() {}
|
||||
|
||||
// Loop-like method, call it in your main loop
|
||||
virtual void tick() {}
|
||||
|
||||
Reference in New Issue
Block a user