/* * productionMode.cpp * * Created on: Jul 26, 2020 * Author: wn */ #include "defines.h" #include #include #include #include #include #include "configuration.h" volatile uint32_t cnt = 0; uint32_t uptime = 0; void count() { static uint32_t lastEvent = 0; uint32_t currentEvent = micros(); if (currentEvent > (lastEvent + configBlock.debounce)) { lastEvent = currentEvent; cnt++; } } // void subscribeApplication() { // } // void callbackApplication(char *topic, uint8_t tokenCnt, char **tokens) { // } void setupApplication() { mqttSetup(); pinMode(REED_PIN, INPUT_PULLUP); attachInterrupt(REED_PIN, count, FALLING); } void loopApplication() { mqttLoop(); uint32_t currentMillis = millis(); static uint32_t lastUptimeMillis = 0; if (currentMillis > (lastUptimeMillis + 1000)) { lastUptimeMillis = currentMillis; uptime++; } static uint32_t totalCnt = 0; static uint32_t lastMillis = 0; if (currentMillis > (lastMillis + (configBlock.valuesPeriod * 1000))) { lastMillis = currentMillis; // rain sensor uint32_t rainCnt = 0; noInterrupts(); rainCnt = cnt; cnt = 0; interrupts(); #ifdef DEBUG Serial.print(rainCnt); Serial.println(); #endif totalCnt += rainCnt; // MQTT publishing #define BUF_SIZE 256 char buf[BUF_SIZE]; snprintf(buf, BUF_SIZE-1, "{\"raincnt\":%ld, \"totalCnt\":%ld, \"uptime\":%ld}", rainCnt, totalCnt, uptime); mqttClient.publish(configBlock.mqttValuesTopic, buf); } }