#ifndef DEVICELDR_H #define DEVICELDR_H #include "Device.h" #include class DeviceLdr : public Device { public: inline DeviceLdr(byte ldrPin) { pin = ldrPin; } virtual void setup(); virtual void homieRegister(); virtual void loop(); private: byte pin; const int INTERVAL_LDR = 60; unsigned long lastSentLDR = 0; int ldr = 0; HomieNode ldrNode = HomieNode("ldr", "ldr"); }; void DeviceLdr::setup() { pinMode(pin, INPUT); } void DeviceLdr::homieRegister() { Homie.registerNode(ldrNode); } void DeviceLdr::loop() { if (millis() - lastSentLDR >= INTERVAL_LDR * 1000UL || lastSentLDR == 0) { int ldr_new = analogRead(pin); if (ldr_new != ldr) { ldr = ldr_new; float ldr_float = map(ldr, 0, 1023, 0, 10000) / 100.0; Serial.print("LDR: "); Serial.println(ldr_float); if (!Homie.setNodeProperty(ldrNode, "value", String(ldr_float), true)) { Serial.println("Sending failed"); } } else { Serial.println("LDR value unchanged"); } lastSentLDR = millis(); } } #endif