50 lines
1.1 KiB
C++
50 lines
1.1 KiB
C++
#ifndef DEVICELDR_H
|
|
#define DEVICELDR_H
|
|
|
|
#include "Device.h"
|
|
#include <Homie.h>
|
|
|
|
class DeviceLdr : public Device {
|
|
public:
|
|
inline DeviceLdr(byte ldrPin) {
|
|
pin = ldrPin;
|
|
}
|
|
virtual void deviceSetup();
|
|
virtual void deviceRegister();
|
|
virtual void deviceLoop();
|
|
private:
|
|
byte pin;
|
|
const int INTERVAL_LDR = 60;
|
|
unsigned long lastSentLDR = 0;
|
|
int ldr = 0;
|
|
HomieNode ldrNode = HomieNode("ldr", "ldr");
|
|
};
|
|
|
|
void DeviceLdr::deviceSetup() {
|
|
pinMode(pin, INPUT);
|
|
}
|
|
|
|
void DeviceLdr::deviceRegister() {
|
|
Homie.registerNode(ldrNode);
|
|
}
|
|
|
|
void DeviceLdr::deviceLoop() {
|
|
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
|