96 lines
1.5 KiB
C++
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);
|
|
}
|
|
|
|
}
|
|
|
|
|