#include #include #include #define SENSOR_CHECK_INTERVAL 4000 #define MSG_SEND_CYCLES 15 #define MSG_SEND_INTERVAL 60000 #define PIN_DHT 8 #define PIN_LDR A7 #define PIN_MOTION 2 #define PIN_DOOR0 7 #define PIN_DOOR1 6 #define PIN_DOOR2 5 #define PIN_DOOR3 4 #define PIN_BACKLIGHT A0 #define SENSOR_ID_DHT_TEMP 0 #define SENSOR_ID_DHT_HUM 1 #define SENSOR_ID_BMP_TEMP 2 #define SENSOR_ID_BMP_BARO 3 #define SENSOR_ID_LDR 4 #define SENSOR_ID_MQ 5 //#define SENSOR_ID_SOUND 6 #define SENSOR_ID_MOTION 7 #define SENSOR_ID_DOOR0 8 #define SENSOR_ID_DOOR1 9 #define SENSOR_ID_DOOR2 10 #define SENSOR_ID_DOOR3 11 #define SENSOR_ID_BACKLIGHT 100 #define SENSOR_ID_VCC 210 #define ADS_CHANNEL_MQ 0 #define ADS_CHANNEL_SOUND 1 #define I2C_ADDR_ADS 0x48 #define I2C_ADDR_BMP 0x76 #define DIN_DEBOUNCE 6 #define MQ_RL 1000 #define MQ_EEPROM_BASE 0 // We need to subclass here to enable temperature/humidity compensation template< uint8_t _tchannel, uint8_t _tsensorId, unsigned _trl = 1000, unsigned _teepromBase = 0, unsigned long _checkInterval = 2000, unsigned long _msgSendTimeout = 30 > class CustomADS1115ChannelMQ135Module : public ADS1115ChannelMQ135Module<_tchannel, _tsensorId, _trl, _teepromBase, _checkInterval, _msgSendTimeout> { public: virtual bool getTempAndHum(float& temp, float& hum) override; }; // For convenience typedef SensorDHT MySensorDHT; typedef SensorADS1115< Tuple< CustomADS1115ChannelMQ135Module >, I2C_ADDR_ADS > MySensorADS1115; // create a NodeManager instance typedef NodeManager< Tuple< MySensorDHT, SensorBMP280, SensorLDR, MySensorADS1115, SensorMotion, SensorDoor, SensorDoor, SensorDoor, SensorDoor, SwitchBacklight, SensorVcc > > MyNodeManagerBase; class MyNodeManager : public MyNodeManagerBase { protected: virtual void processCommand(const char * message) override { if (strcmp_P(message, PSTR("MQ_CAL")) == 0) { getSensor<3, MySensorADS1115>().calibrateSubmodule<0>(); } else { MyNodeManagerBase::processCommand(message); } } } nodeManager; template< uint8_t _tchannel, uint8_t _tsensorId, unsigned _trl, unsigned _teepromBase, unsigned long _checkInterval, unsigned long _msgSendTimeout > bool CustomADS1115ChannelMQ135Module<_tchannel, _tsensorId, _trl, _teepromBase, _checkInterval, _msgSendTimeout>::getTempAndHum(float& temp, float& hum) { auto& dht = nodeManager.getSensor<0, MySensorDHT>(); temp = dht.getTemperature(); hum = dht.getHumidity(); return true; } void before() { //nodeManager.setSleep(ALWAYS_ON, 2, SECONDS); nodeManager.before(); } void setup() { nodeManager.setup(); } void presentation() { nodeManager.presentation(); } void receive(const MyMessage &message) { nodeManager.receive(message); } void receiveTime(unsigned long ts) { nodeManager.receiveTime(ts); } void loop() { nodeManager.loop(); }