diff --git a/NodeManagerTemplate/NodeManager.cpp b/NodeManagerTemplate/NodeManager.cpp index 56d4e6a50f5b0a1e5515352832eb47e5d1cc3bca..c747f8c6050364115fea4ea355f3f4a3d2f291f1 100644 --- a/NodeManagerTemplate/NodeManager.cpp +++ b/NodeManagerTemplate/NodeManager.cpp @@ -704,14 +704,18 @@ void SensorSwitch::setMode(int value) { int SensorSwitch::getMode() { return _mode; } -// setter/getter void SensorSwitch::setDebounce(int value) { _debounce = value; } -// setter/getter void SensorSwitch::setTriggerTime(int value) { _trigger_time = value; } +void SensorSwitch::setInitial(int value) { + _initial = value; +} +int SensorSwitch::getInitial() { + return _initial; +} // what do to during setup void SensorSwitch::onBefore() { @@ -763,6 +767,8 @@ SensorMotion::SensorMotion(int child_id, int pin): SensorSwitch(child_id,pin) { setPresentation(S_MOTION); // capture only when it triggers setMode(RISING); + // set initial value to LOW + setInitial(LOW); } /* @@ -1013,7 +1019,8 @@ int NodeManager::registerSensor(int sensor_type, int pin, int child_id) { else if (sensor_type == SENSOR_DOOR) index = registerSensor(new SensorDoor(child_id, pin)); else if (sensor_type == SENSOR_MOTION) index = registerSensor(new SensorMotion(child_id, pin)); // set an interrupt on the pin and activate internal pull up - setInterrupt(pin,((SensorSwitch*)get(index))->getMode(),HIGH); + SensorSwitch* sensor = (SensorSwitch*)get(index); + setInterrupt(pin,sensor->getMode(),sensor->getInitial()); return index; } #endif diff --git a/NodeManagerTemplate/NodeManager.h b/NodeManagerTemplate/NodeManager.h index b259b08e0f063ce0ea1ce251a6a78168625e8dfc..def4712c1541e1e6a5943a4c2d6707dd068ac721 100644 --- a/NodeManagerTemplate/NodeManager.h +++ b/NodeManagerTemplate/NodeManager.h @@ -496,6 +496,9 @@ class SensorSwitch: public Sensor { void setDebounce(int value); // time to wait in milliseconds after a change is detected to allow the signal to be restored to its normal value (default: 0) void setTriggerTime(int value); + // Set initial value on the interrupt pin (default: HIGH) + void setInitial(int value); + int getInitial(); // define what to do at each stage of the sketch void onBefore(); void onLoop(); @@ -504,6 +507,7 @@ class SensorSwitch: public Sensor { int _debounce = 0; int _trigger_time = 0; int _mode = CHANGE; + int _initial = HIGH; }; /* diff --git a/NodeManagerTemplate/config.h b/NodeManagerTemplate/config.h index c0ae2be9f13cadb655a734aa6bb8db184d53f98f..32e529600fd46758279739193cb4b94aeb7ae034 100644 --- a/NodeManagerTemplate/config.h +++ b/NodeManagerTemplate/config.h @@ -6,7 +6,7 @@ */ #define SKETCH_NAME "NodeManagerTemplate" -#define SKETCH_VERSION "1.2" +#define SKETCH_VERSION "1.3-dev" /********************************** * MySensors configuration