Updated with reed relais and debouncing button

This commit is contained in:
Ard Kuijpers
2020-04-08 22:44:37 +02:00
parent d02b9a63f4
commit ae9f175dad
9 changed files with 441 additions and 269 deletions

View File

@@ -1,44 +1,48 @@
#include <Homie.h>
#include "PingNode.hpp"
//#include "RelayNode.hpp"
#include "RelayNode.hpp"
#include "DHT22Node.hpp"
#define TURN_ON LOW
#define TURN_OFF HIGH
const int trigPin = D1;
const int echoPin = D2;
const int relayPin = D5;
#include "ButtonNode.hpp"
#include "ContactNode.hpp"
#include "Heartbeater.hpp"
// #include "PingNode.hpp"
//const int trigPin = D1;
//const int echoPin = D2;
const int relayPin = D1;
const int contactPin = D2;
const int buttonPin = D5;
const int dhtPin = D7; ;
const int ledPin = LED_BUILTIN;
const int ledPin = LED_BUILTIN;
const int heartbeatPin = LED_BUILTIN;
unsigned long HEARTBEAT_INTERVAL = 5;
unsigned long lastHeartbeat = 0;
unsigned long TEMPERATURE_INTERVAL = 120;
unsigned long lastTemperatureUpdate = 0;
bool relayInverse = true;
PingNode obstacleNode("obstacle",trigPin,echoPin);
//PingNode obstacleNode("obstacle",trigPin,echoPin);
DHT22Node airNode("air",dhtPin,TEMPERATURE_INTERVAL);
//RelayNode relayNode("relay",relayPin,ledPin);
RelayNode relayNode("relay",relayPin,ledPin,relayInverse);
ButtonNode buttonNode("button",buttonPin);
ContactNode contactNode("contact",contactPin);
Heartbeater heartbeater(heartbeatPin, heartbeatPin == LED_BUILTIN ? LOW : HIGH);
void signal_led(bool on = true);
void heartbeat_led(int times = 2);
void changeHandler() {
signal_led();
}
void loopHandler() {
if (millis() - lastHeartbeat > HEARTBEAT_INTERVAL * 1000UL || lastHeartbeat == 0) {
heartbeat_led();
lastHeartbeat = millis();
}
if (millis() - lastTemperatureUpdate > TEMPERATURE_INTERVAL * 1000UL || lastTemperatureUpdate == 0) {
obstacleNode.setTemperature(airNode.getTemperature());
lastTemperatureUpdate = millis();
}
void buttonChangeHandler(bool down) {
Homie.getLogger() << "Button changing relay to " << (down ? "on" : "off") << endl;
relayNode.setRelay(down);
}
void loopHandler() {
heartbeater.loop();
// if (millis() - lastTemperatureUpdate > TEMPERATURE_INTERVAL * 1000UL || lastTemperatureUpdate == 0) {
// obstacleNode.setTemperature(airNode.getTemperature());
// lastTemperatureUpdate = millis();
// }
}
void setup() {
@@ -48,9 +52,10 @@ void setup() {
pinMode(ledPin, OUTPUT);
Homie_setBrand("EtxeanIoT");
Homie_setFirmware("etxean-garagesensor", "1.0.5");
Homie_setFirmware("etxean-garagesensor", "1.2.3");
Homie.setLoopFunction(loopHandler);
obstacleNode.setChangeHandler(changeHandler);
// obstacleNode.setChangeHandler(changeHandler);
buttonNode.onChange(buttonChangeHandler);
Homie.setup();
}
@@ -58,25 +63,10 @@ void loop() {
Homie.loop();
}
const uint8_t TURN_ON = ledPin == LED_BUILTIN ? LOW : HIGH;
const uint8_t TURN_OFF = ledPin == LED_BUILTIN ? HIGH : LOW;
void signal_led(bool on)
{
digitalWrite(ledPin, on ? TURN_ON : TURN_OFF);
}
void heartbeat_led(int times)
{
for (int blink=0; blink<times; blink++)
{
signal_led(true);
delay(10);
signal_led(false);
delay(200);
}
}
void longbeat_led()
{
signal_led(true);
delay(500);
signal_led(false);
}