diff --git a/things/DeviceButton.cpp b/things/DeviceButton.cpp new file mode 100644 index 0000000..2956ac4 --- /dev/null +++ b/things/DeviceButton.cpp @@ -0,0 +1,25 @@ +#include "DeviceButton.h" + +void DeviceButton::deviceSetup() { + pinMode(pin, INPUT); +} + +void DeviceButton::deviceRegister() { + Homie.registerNode(buttonNode); +} + +void DeviceButton::deviceLoop() { + byte debounce = 0; + for (int i = 0; i < 3; i++) { + if (digitalRead(pin) == state) { + return; + } + delay(10); + } + state = !state; + Serial.print("button: "); + Serial.println(state); + if (!Homie.setNodeProperty(buttonNode, "state", String(state), false)) { + Serial.println("Sending failed"); + } +} diff --git a/things/DeviceButton.h b/things/DeviceButton.h new file mode 100644 index 0000000..1d7eb16 --- /dev/null +++ b/things/DeviceButton.h @@ -0,0 +1,18 @@ +#pragma once + +#include "Device.h" +#include + +class DeviceButton : public Device { + public: + inline DeviceButton(byte buttonPin) { + pin = buttonPin; + } + virtual void deviceSetup(); + virtual void deviceRegister(); + virtual void deviceLoop(); + private: + byte pin; + bool state = LOW; + HomieNode buttonNode = HomieNode("button", "button"); +}; diff --git a/things/things.ino b/things/things.ino index 3e384cd..edbf7e5 100644 --- a/things/things.ino +++ b/things/things.ino @@ -5,6 +5,7 @@ #include "DeviceDht.h" #include "DeviceIrRx.h" #include "DeviceIrTx.h" +#include "DeviceButton.h" const byte PIN_LED_RED = D8; const byte PIN_LED_GREEN = D6; @@ -25,12 +26,16 @@ DeviceIrRx deviceIrRx(PIN_IRRX, PIN_POWER); const byte PIN_IRTX = D2; DeviceIrTx deviceIrTx(PIN_IRTX); +const byte PIN_BUTTON = D2; +DeviceButton deviceButton(PIN_BUTTON); + Device* devices[] = { &deviceLed, &deviceLdr, &deviceDht, &deviceIrRx, &deviceIrTx, + &deviceButton, }; void setupHandler() {