mirror of
https://github.com/meshtastic/firmware.git
synced 2025-02-08 13:41:28 +00:00
DetectionSensor: more flexible triggering
This commit is contained in:
parent
114df8cb1b
commit
be01c18c74
@ -472,7 +472,7 @@ void NodeDB::installDefaultModuleConfig()
|
|||||||
|
|
||||||
moduleConfig.has_detection_sensor = true;
|
moduleConfig.has_detection_sensor = true;
|
||||||
moduleConfig.detection_sensor.enabled = false;
|
moduleConfig.detection_sensor.enabled = false;
|
||||||
moduleConfig.detection_sensor.detection_triggered_high = true;
|
moduleConfig.detection_sensor.detection_trigger_type = meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_LOGIC_HIGH;
|
||||||
moduleConfig.detection_sensor.minimum_broadcast_secs = 45;
|
moduleConfig.detection_sensor.minimum_broadcast_secs = 45;
|
||||||
|
|
||||||
moduleConfig.has_ambient_lighting = true;
|
moduleConfig.has_ambient_lighting = true;
|
||||||
|
@ -19,6 +19,23 @@ typedef enum _meshtastic_RemoteHardwarePinType {
|
|||||||
meshtastic_RemoteHardwarePinType_DIGITAL_WRITE = 2
|
meshtastic_RemoteHardwarePinType_DIGITAL_WRITE = 2
|
||||||
} meshtastic_RemoteHardwarePinType;
|
} meshtastic_RemoteHardwarePinType;
|
||||||
|
|
||||||
|
typedef enum _meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType {
|
||||||
|
/* Event is triggered if pin is low */
|
||||||
|
meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_LOGIC_LOW = 0,
|
||||||
|
/* Event is triggered if pin is high */
|
||||||
|
meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_LOGIC_HIGH = 1,
|
||||||
|
/* Event is triggered when pin goes high to low */
|
||||||
|
meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_FALLING_EDGE = 2,
|
||||||
|
/* Event is triggered when pin goes low to high */
|
||||||
|
meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_RISING_EDGE = 3,
|
||||||
|
/* Event is triggered on every pin state change, low is considered to be
|
||||||
|
"active" */
|
||||||
|
meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_EITHER_EDGE_ACTIVE_LOW = 4,
|
||||||
|
/* Event is triggered on every pin state change, high is considered to be
|
||||||
|
"active" */
|
||||||
|
meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_EITHER_EDGE_ACTIVE_HIGH = 5
|
||||||
|
} meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType;
|
||||||
|
|
||||||
/* Baudrate for codec2 voice */
|
/* Baudrate for codec2 voice */
|
||||||
typedef enum _meshtastic_ModuleConfig_AudioConfig_Audio_Baud {
|
typedef enum _meshtastic_ModuleConfig_AudioConfig_Audio_Baud {
|
||||||
meshtastic_ModuleConfig_AudioConfig_Audio_Baud_CODEC2_DEFAULT = 0,
|
meshtastic_ModuleConfig_AudioConfig_Audio_Baud_CODEC2_DEFAULT = 0,
|
||||||
@ -144,11 +161,13 @@ typedef struct _meshtastic_ModuleConfig_NeighborInfoConfig {
|
|||||||
typedef struct _meshtastic_ModuleConfig_DetectionSensorConfig {
|
typedef struct _meshtastic_ModuleConfig_DetectionSensorConfig {
|
||||||
/* Whether the Module is enabled */
|
/* Whether the Module is enabled */
|
||||||
bool enabled;
|
bool enabled;
|
||||||
/* Interval in seconds of how often we can send a message to the mesh when a state change is detected */
|
/* Interval in seconds of how often we can send a message to the mesh when a
|
||||||
|
trigger event is detected */
|
||||||
uint32_t minimum_broadcast_secs;
|
uint32_t minimum_broadcast_secs;
|
||||||
/* Interval in seconds of how often we should send a message to the mesh with the current state regardless of changes
|
/* Interval in seconds of how often we should send a message to the mesh
|
||||||
When set to 0, only state changes will be broadcasted
|
with the current state regardless of trigger events When set to 0, only
|
||||||
Works as a sort of status heartbeat for peace of mind */
|
trigger events will be broadcasted Works as a sort of status heartbeat
|
||||||
|
for peace of mind */
|
||||||
uint32_t state_broadcast_secs;
|
uint32_t state_broadcast_secs;
|
||||||
/* Send ASCII bell with alert message
|
/* Send ASCII bell with alert message
|
||||||
Useful for triggering ext. notification on bell */
|
Useful for triggering ext. notification on bell */
|
||||||
@ -159,9 +178,8 @@ typedef struct _meshtastic_ModuleConfig_DetectionSensorConfig {
|
|||||||
char name[20];
|
char name[20];
|
||||||
/* GPIO pin to monitor for state changes */
|
/* GPIO pin to monitor for state changes */
|
||||||
uint8_t monitor_pin;
|
uint8_t monitor_pin;
|
||||||
/* Whether or not the GPIO pin state detection is triggered on HIGH (1)
|
/* The type of trigger event to be used */
|
||||||
Otherwise LOW (0) */
|
meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType detection_trigger_type;
|
||||||
bool detection_triggered_high;
|
|
||||||
/* Whether or not use INPUT_PULLUP mode for GPIO pin
|
/* Whether or not use INPUT_PULLUP mode for GPIO pin
|
||||||
Only applicable if the board uses pull-up resistors on the pin */
|
Only applicable if the board uses pull-up resistors on the pin */
|
||||||
bool use_pullup;
|
bool use_pullup;
|
||||||
@ -427,6 +445,10 @@ extern "C" {
|
|||||||
#define _meshtastic_RemoteHardwarePinType_MAX meshtastic_RemoteHardwarePinType_DIGITAL_WRITE
|
#define _meshtastic_RemoteHardwarePinType_MAX meshtastic_RemoteHardwarePinType_DIGITAL_WRITE
|
||||||
#define _meshtastic_RemoteHardwarePinType_ARRAYSIZE ((meshtastic_RemoteHardwarePinType)(meshtastic_RemoteHardwarePinType_DIGITAL_WRITE+1))
|
#define _meshtastic_RemoteHardwarePinType_ARRAYSIZE ((meshtastic_RemoteHardwarePinType)(meshtastic_RemoteHardwarePinType_DIGITAL_WRITE+1))
|
||||||
|
|
||||||
|
#define _meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_MIN meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_LOGIC_LOW
|
||||||
|
#define _meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_MAX meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_EITHER_EDGE_ACTIVE_HIGH
|
||||||
|
#define _meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_ARRAYSIZE ((meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType)(meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_EITHER_EDGE_ACTIVE_HIGH+1))
|
||||||
|
|
||||||
#define _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_MIN meshtastic_ModuleConfig_AudioConfig_Audio_Baud_CODEC2_DEFAULT
|
#define _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_MIN meshtastic_ModuleConfig_AudioConfig_Audio_Baud_CODEC2_DEFAULT
|
||||||
#define _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_MAX meshtastic_ModuleConfig_AudioConfig_Audio_Baud_CODEC2_700B
|
#define _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_MAX meshtastic_ModuleConfig_AudioConfig_Audio_Baud_CODEC2_700B
|
||||||
#define _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_ARRAYSIZE ((meshtastic_ModuleConfig_AudioConfig_Audio_Baud)(meshtastic_ModuleConfig_AudioConfig_Audio_Baud_CODEC2_700B+1))
|
#define _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_ARRAYSIZE ((meshtastic_ModuleConfig_AudioConfig_Audio_Baud)(meshtastic_ModuleConfig_AudioConfig_Audio_Baud_CODEC2_700B+1))
|
||||||
@ -448,6 +470,7 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define meshtastic_ModuleConfig_DetectionSensorConfig_detection_trigger_type_ENUMTYPE meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType
|
||||||
|
|
||||||
#define meshtastic_ModuleConfig_AudioConfig_bitrate_ENUMTYPE meshtastic_ModuleConfig_AudioConfig_Audio_Baud
|
#define meshtastic_ModuleConfig_AudioConfig_bitrate_ENUMTYPE meshtastic_ModuleConfig_AudioConfig_Audio_Baud
|
||||||
|
|
||||||
@ -473,7 +496,7 @@ extern "C" {
|
|||||||
#define meshtastic_ModuleConfig_MapReportSettings_init_default {0, 0}
|
#define meshtastic_ModuleConfig_MapReportSettings_init_default {0, 0}
|
||||||
#define meshtastic_ModuleConfig_RemoteHardwareConfig_init_default {0, 0, 0, {meshtastic_RemoteHardwarePin_init_default, meshtastic_RemoteHardwarePin_init_default, meshtastic_RemoteHardwarePin_init_default, meshtastic_RemoteHardwarePin_init_default}}
|
#define meshtastic_ModuleConfig_RemoteHardwareConfig_init_default {0, 0, 0, {meshtastic_RemoteHardwarePin_init_default, meshtastic_RemoteHardwarePin_init_default, meshtastic_RemoteHardwarePin_init_default, meshtastic_RemoteHardwarePin_init_default}}
|
||||||
#define meshtastic_ModuleConfig_NeighborInfoConfig_init_default {0, 0}
|
#define meshtastic_ModuleConfig_NeighborInfoConfig_init_default {0, 0}
|
||||||
#define meshtastic_ModuleConfig_DetectionSensorConfig_init_default {0, 0, 0, 0, "", 0, 0, 0}
|
#define meshtastic_ModuleConfig_DetectionSensorConfig_init_default {0, 0, 0, 0, "", 0, _meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_MIN, 0}
|
||||||
#define meshtastic_ModuleConfig_AudioConfig_init_default {0, 0, _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_MIN, 0, 0, 0, 0}
|
#define meshtastic_ModuleConfig_AudioConfig_init_default {0, 0, _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_MIN, 0, 0, 0, 0}
|
||||||
#define meshtastic_ModuleConfig_PaxcounterConfig_init_default {0, 0, 0, 0}
|
#define meshtastic_ModuleConfig_PaxcounterConfig_init_default {0, 0, 0, 0}
|
||||||
#define meshtastic_ModuleConfig_SerialConfig_init_default {0, 0, 0, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Mode_MIN, 0}
|
#define meshtastic_ModuleConfig_SerialConfig_init_default {0, 0, 0, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Mode_MIN, 0}
|
||||||
@ -489,7 +512,7 @@ extern "C" {
|
|||||||
#define meshtastic_ModuleConfig_MapReportSettings_init_zero {0, 0}
|
#define meshtastic_ModuleConfig_MapReportSettings_init_zero {0, 0}
|
||||||
#define meshtastic_ModuleConfig_RemoteHardwareConfig_init_zero {0, 0, 0, {meshtastic_RemoteHardwarePin_init_zero, meshtastic_RemoteHardwarePin_init_zero, meshtastic_RemoteHardwarePin_init_zero, meshtastic_RemoteHardwarePin_init_zero}}
|
#define meshtastic_ModuleConfig_RemoteHardwareConfig_init_zero {0, 0, 0, {meshtastic_RemoteHardwarePin_init_zero, meshtastic_RemoteHardwarePin_init_zero, meshtastic_RemoteHardwarePin_init_zero, meshtastic_RemoteHardwarePin_init_zero}}
|
||||||
#define meshtastic_ModuleConfig_NeighborInfoConfig_init_zero {0, 0}
|
#define meshtastic_ModuleConfig_NeighborInfoConfig_init_zero {0, 0}
|
||||||
#define meshtastic_ModuleConfig_DetectionSensorConfig_init_zero {0, 0, 0, 0, "", 0, 0, 0}
|
#define meshtastic_ModuleConfig_DetectionSensorConfig_init_zero {0, 0, 0, 0, "", 0, _meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_MIN, 0}
|
||||||
#define meshtastic_ModuleConfig_AudioConfig_init_zero {0, 0, _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_MIN, 0, 0, 0, 0}
|
#define meshtastic_ModuleConfig_AudioConfig_init_zero {0, 0, _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_MIN, 0, 0, 0, 0}
|
||||||
#define meshtastic_ModuleConfig_PaxcounterConfig_init_zero {0, 0, 0, 0}
|
#define meshtastic_ModuleConfig_PaxcounterConfig_init_zero {0, 0, 0, 0}
|
||||||
#define meshtastic_ModuleConfig_SerialConfig_init_zero {0, 0, 0, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Mode_MIN, 0}
|
#define meshtastic_ModuleConfig_SerialConfig_init_zero {0, 0, 0, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Mode_MIN, 0}
|
||||||
@ -523,7 +546,7 @@ extern "C" {
|
|||||||
#define meshtastic_ModuleConfig_DetectionSensorConfig_send_bell_tag 4
|
#define meshtastic_ModuleConfig_DetectionSensorConfig_send_bell_tag 4
|
||||||
#define meshtastic_ModuleConfig_DetectionSensorConfig_name_tag 5
|
#define meshtastic_ModuleConfig_DetectionSensorConfig_name_tag 5
|
||||||
#define meshtastic_ModuleConfig_DetectionSensorConfig_monitor_pin_tag 6
|
#define meshtastic_ModuleConfig_DetectionSensorConfig_monitor_pin_tag 6
|
||||||
#define meshtastic_ModuleConfig_DetectionSensorConfig_detection_triggered_high_tag 7
|
#define meshtastic_ModuleConfig_DetectionSensorConfig_detection_trigger_type_tag 7
|
||||||
#define meshtastic_ModuleConfig_DetectionSensorConfig_use_pullup_tag 8
|
#define meshtastic_ModuleConfig_DetectionSensorConfig_use_pullup_tag 8
|
||||||
#define meshtastic_ModuleConfig_AudioConfig_codec2_enabled_tag 1
|
#define meshtastic_ModuleConfig_AudioConfig_codec2_enabled_tag 1
|
||||||
#define meshtastic_ModuleConfig_AudioConfig_ptt_pin_tag 2
|
#define meshtastic_ModuleConfig_AudioConfig_ptt_pin_tag 2
|
||||||
@ -688,7 +711,7 @@ X(a, STATIC, SINGULAR, UINT32, state_broadcast_secs, 3) \
|
|||||||
X(a, STATIC, SINGULAR, BOOL, send_bell, 4) \
|
X(a, STATIC, SINGULAR, BOOL, send_bell, 4) \
|
||||||
X(a, STATIC, SINGULAR, STRING, name, 5) \
|
X(a, STATIC, SINGULAR, STRING, name, 5) \
|
||||||
X(a, STATIC, SINGULAR, UINT32, monitor_pin, 6) \
|
X(a, STATIC, SINGULAR, UINT32, monitor_pin, 6) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, detection_triggered_high, 7) \
|
X(a, STATIC, SINGULAR, UENUM, detection_trigger_type, 7) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, use_pullup, 8)
|
X(a, STATIC, SINGULAR, BOOL, use_pullup, 8)
|
||||||
#define meshtastic_ModuleConfig_DetectionSensorConfig_CALLBACK NULL
|
#define meshtastic_ModuleConfig_DetectionSensorConfig_CALLBACK NULL
|
||||||
#define meshtastic_ModuleConfig_DetectionSensorConfig_DEFAULT NULL
|
#define meshtastic_ModuleConfig_DetectionSensorConfig_DEFAULT NULL
|
||||||
|
@ -10,6 +10,41 @@ DetectionSensorModule *detectionSensorModule;
|
|||||||
#define GPIO_POLLING_INTERVAL 100
|
#define GPIO_POLLING_INTERVAL 100
|
||||||
#define DELAYED_INTERVAL 1000
|
#define DELAYED_INTERVAL 1000
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
DetectionSensorVerdictDetected,
|
||||||
|
DetectionSensorVerdictSendState,
|
||||||
|
DetectionSensorVerdictNoop,
|
||||||
|
} DetectionSensorTriggerVerdict;
|
||||||
|
|
||||||
|
typedef DetectionSensorTriggerVerdict (*DetectionSensorTriggerHandler)(bool prev, bool current);
|
||||||
|
|
||||||
|
static DetectionSensorTriggerVerdict detection_trigger_logic_level(bool prev, bool current)
|
||||||
|
{
|
||||||
|
return current ? DetectionSensorVerdictDetected : DetectionSensorVerdictNoop;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DetectionSensorTriggerVerdict detection_trigger_single_edge(bool prev, bool current)
|
||||||
|
{
|
||||||
|
return (!prev && current) ? DetectionSensorVerdictDetected : DetectionSensorVerdictNoop;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DetectionSensorTriggerVerdict detection_trigger_either_edge(bool prev, bool current)
|
||||||
|
{
|
||||||
|
if (prev == current) {
|
||||||
|
return DetectionSensorVerdictNoop;
|
||||||
|
}
|
||||||
|
return current ? DetectionSensorVerdictDetected : DetectionSensorVerdictSendState;
|
||||||
|
}
|
||||||
|
|
||||||
|
const static DetectionSensorTriggerHandler handlers[_meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_MAX + 1] = {
|
||||||
|
[meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_LOGIC_LOW] = detection_trigger_logic_level,
|
||||||
|
[meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_LOGIC_HIGH] = detection_trigger_logic_level,
|
||||||
|
[meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_FALLING_EDGE] = detection_trigger_single_edge,
|
||||||
|
[meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_RISING_EDGE] = detection_trigger_single_edge,
|
||||||
|
[meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_EITHER_EDGE_ACTIVE_LOW] = detection_trigger_either_edge,
|
||||||
|
[meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_EITHER_EDGE_ACTIVE_HIGH] = detection_trigger_either_edge,
|
||||||
|
};
|
||||||
|
|
||||||
int32_t DetectionSensorModule::runOnce()
|
int32_t DetectionSensorModule::runOnce()
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -21,8 +56,8 @@ int32_t DetectionSensorModule::runOnce()
|
|||||||
// moduleConfig.detection_sensor.monitor_pin = 21; // WisBlock RAK12013 Radar IO6
|
// moduleConfig.detection_sensor.monitor_pin = 21; // WisBlock RAK12013 Radar IO6
|
||||||
// moduleConfig.detection_sensor.minimum_broadcast_secs = 30;
|
// moduleConfig.detection_sensor.minimum_broadcast_secs = 30;
|
||||||
// moduleConfig.detection_sensor.state_broadcast_secs = 120;
|
// moduleConfig.detection_sensor.state_broadcast_secs = 120;
|
||||||
// moduleConfig.detection_sensor.detection_triggered_high = true;
|
// moduleConfig.detection_sensor.detection_trigger_type =
|
||||||
// strcpy(moduleConfig.detection_sensor.name, "Motion");
|
// meshtastic_ModuleConfig_DetectionSensorConfig_TriggerType_LOGIC_HIGH; strcpy(moduleConfig.detection_sensor.name, "Motion");
|
||||||
|
|
||||||
if (moduleConfig.detection_sensor.enabled == false)
|
if (moduleConfig.detection_sensor.enabled == false)
|
||||||
return disable();
|
return disable();
|
||||||
@ -49,18 +84,29 @@ int32_t DetectionSensorModule::runOnce()
|
|||||||
|
|
||||||
// LOG_DEBUG("Detection Sensor Module: Current pin state: %i\n", digitalRead(moduleConfig.detection_sensor.monitor_pin));
|
// LOG_DEBUG("Detection Sensor Module: Current pin state: %i\n", digitalRead(moduleConfig.detection_sensor.monitor_pin));
|
||||||
|
|
||||||
if ((millis() - lastSentToMesh) >= Default::getConfiguredOrDefaultMs(moduleConfig.detection_sensor.minimum_broadcast_secs) &&
|
if ((millis() - lastSentToMesh) >= Default::getConfiguredOrDefaultMs(moduleConfig.detection_sensor.minimum_broadcast_secs)) {
|
||||||
hasDetectionEvent()) {
|
bool isDetected = hasDetectionEvent();
|
||||||
sendDetectionMessage();
|
DetectionSensorTriggerVerdict verdict =
|
||||||
return DELAYED_INTERVAL;
|
handlers[moduleConfig.detection_sensor.detection_trigger_type](wasDetected, isDetected);
|
||||||
|
wasDetected = isDetected;
|
||||||
|
switch (verdict) {
|
||||||
|
case DetectionSensorVerdictDetected:
|
||||||
|
sendDetectionMessage();
|
||||||
|
return DELAYED_INTERVAL;
|
||||||
|
case DetectionSensorVerdictSendState:
|
||||||
|
sendCurrentStateMessage(isDetected);
|
||||||
|
return DELAYED_INTERVAL;
|
||||||
|
case DetectionSensorVerdictNoop:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Even if we haven't detected an event, broadcast our current state to the mesh on the scheduled interval as a sort
|
// Even if we haven't detected an event, broadcast our current state to the mesh on the scheduled interval as a sort
|
||||||
// of heartbeat. We only do this if the minimum broadcast interval is greater than zero, otherwise we'll only broadcast state
|
// of heartbeat. We only do this if the minimum broadcast interval is greater than zero, otherwise we'll only broadcast state
|
||||||
// change detections.
|
// change detections.
|
||||||
else if (moduleConfig.detection_sensor.state_broadcast_secs > 0 &&
|
if (moduleConfig.detection_sensor.state_broadcast_secs > 0 &&
|
||||||
(millis() - lastSentToMesh) >= Default::getConfiguredOrDefaultMs(moduleConfig.detection_sensor.state_broadcast_secs,
|
(millis() - lastSentToMesh) >= Default::getConfiguredOrDefaultMs(moduleConfig.detection_sensor.state_broadcast_secs,
|
||||||
default_telemetry_broadcast_interval_secs)) {
|
default_telemetry_broadcast_interval_secs)) {
|
||||||
sendCurrentStateMessage();
|
sendCurrentStateMessage(hasDetectionEvent());
|
||||||
return DELAYED_INTERVAL;
|
return DELAYED_INTERVAL;
|
||||||
}
|
}
|
||||||
return GPIO_POLLING_INTERVAL;
|
return GPIO_POLLING_INTERVAL;
|
||||||
@ -86,10 +132,10 @@ void DetectionSensorModule::sendDetectionMessage()
|
|||||||
delete[] message;
|
delete[] message;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DetectionSensorModule::sendCurrentStateMessage()
|
void DetectionSensorModule::sendCurrentStateMessage(bool state)
|
||||||
{
|
{
|
||||||
char *message = new char[40];
|
char *message = new char[40];
|
||||||
sprintf(message, "%s state: %i", moduleConfig.detection_sensor.name, hasDetectionEvent());
|
sprintf(message, "%s state: %i", moduleConfig.detection_sensor.name, state);
|
||||||
|
|
||||||
meshtastic_MeshPacket *p = allocDataPacket();
|
meshtastic_MeshPacket *p = allocDataPacket();
|
||||||
p->want_ack = false;
|
p->want_ack = false;
|
||||||
@ -105,5 +151,5 @@ bool DetectionSensorModule::hasDetectionEvent()
|
|||||||
{
|
{
|
||||||
bool currentState = digitalRead(moduleConfig.detection_sensor.monitor_pin);
|
bool currentState = digitalRead(moduleConfig.detection_sensor.monitor_pin);
|
||||||
// LOG_DEBUG("Detection Sensor Module: Current state: %i\n", currentState);
|
// LOG_DEBUG("Detection Sensor Module: Current state: %i\n", currentState);
|
||||||
return moduleConfig.detection_sensor.detection_triggered_high ? currentState : !currentState;
|
return (moduleConfig.detection_sensor.detection_trigger_type & 1) ? currentState : !currentState;
|
||||||
}
|
}
|
@ -15,8 +15,9 @@ class DetectionSensorModule : public SinglePortModule, private concurrency::OSTh
|
|||||||
private:
|
private:
|
||||||
bool firstTime = true;
|
bool firstTime = true;
|
||||||
uint32_t lastSentToMesh = 0;
|
uint32_t lastSentToMesh = 0;
|
||||||
|
bool wasDetected = false;
|
||||||
void sendDetectionMessage();
|
void sendDetectionMessage();
|
||||||
void sendCurrentStateMessage();
|
void sendCurrentStateMessage(bool state);
|
||||||
bool hasDetectionEvent();
|
bool hasDetectionEvent();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user