Files
rainsensor2/sketch/application.cpp

96 lines
1.5 KiB
C++

/*
* productionMode.cpp
*
* Created on: Jul 26, 2020
* Author: wn
*/
#include "defines.h"
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdbool.h>
#include <mqttHandling.h>
#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);
}
}