commit 0b958040187c0c4a139f125548e222a316099a7f Author: Bryan Date: Fri Apr 23 22:57:32 2021 -0600 initial commit diff --git a/homie-rcwl.ino b/homie-rcwl.ino new file mode 100644 index 0000000..9425348 --- /dev/null +++ b/homie-rcwl.ino @@ -0,0 +1,55 @@ +#include + +const byte TRIGGER_PIN = 3; //pin 3 which is RX pin. Doesn't seem to work on GPIO0 or GPIO2, maybe because they have internal pull up resistors? +const unsigned int TRIGGER_HOLD_TIME = 5000; // 5 seconds +unsigned long triggerTime = 0; +enum trigger_status {start, stop}; + +trigger_status triggerStatus = stop; + +HomieNode motionNode("motion", "Motion", "motion"); + +void loopHandler(){ + + if (digitalRead(TRIGGER_PIN) == HIGH) { // if triggered + triggerTime = millis(); // set trigger timer to current time + + if (triggerStatus == stop) { // if trigger status == stop + motionNode.setProperty("motion").send("true"); // send mqtt "motion started" + triggerStatus = start; // set trigger status to start + } + } + + else { // if not triggered + if (triggerStatus == start) { // if trigger status == start + if (millis() - triggerTime >= TRIGGER_HOLD_TIME) { // if difference between 'current time' and 'trigger timer' >= 'trigger hold time' + motionNode.setProperty("motion").send("false"); // send mqtt "motion stopped" + triggerStatus = stop; // set trigger status to "stop" + } + } + } //end else +} // loopHandler() + + +void setup() { + //Serial.begin(115200); + Homie_setFirmware("homie-motion", "1.0.0"); + Homie.setLoopFunction(loopHandler); + + pinMode(TRIGGER_PIN, INPUT); + triggerStatus = stop; + + motionNode.advertise("motion").setName("Motion Detected") + .setDatatype("boolean") + .setRetained(false); + Homie.setup(); + + motionNode.setProperty("motion").send("false"); + +} + + +// the loop routine runs over and over again forever: +void loop() { + Homie.loop(); +}