91 lines
2.1 KiB
C++
91 lines
2.1 KiB
C++
#include <header.h>
|
|
#include <string>
|
|
//using namespace std;
|
|
extern "C"
|
|
{
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
}
|
|
|
|
#define MQTT_MOISTURE MQTT_PATH_PUB "moisture"
|
|
#define MQTT_TEMPERATURE MQTT_PATH_PUB "temperature"
|
|
#define MQTT_HUMIDITY MQTT_PATH_PUB "humidity"
|
|
#define MQTT_BRIGHTNESS MQTT_PATH_PUB "brightness"
|
|
|
|
char buffer[16];
|
|
|
|
void readSensors()
|
|
{
|
|
float lxValue = readLightSensorValue();
|
|
Serial.print("Light intensity: ");
|
|
Serial.print(lxValue);
|
|
Serial.println(" lx");
|
|
sprintf(buffer, "%f", lxValue);
|
|
publishMessage(MQTT_BRIGHTNESS, buffer);
|
|
|
|
int mstValue = readCapacitiveSoilMoistureSensor();
|
|
Serial.print("Soil moisture: ");
|
|
Serial.println(mstValue);
|
|
sprintf(buffer, "%i", mstValue);
|
|
publishMessage(MQTT_MOISTURE, buffer);
|
|
|
|
float humidityValue = readHumidity();
|
|
Serial.print("Humidity: ");
|
|
Serial.println(humidityValue);
|
|
sprintf(buffer, "%f", humidityValue);
|
|
publishMessage(MQTT_HUMIDITY, buffer);
|
|
|
|
float temperatureValue = readTemperature();
|
|
Serial.print("Temperature: ");
|
|
Serial.println(temperatureValue);
|
|
sprintf(buffer, "%f", temperatureValue);
|
|
publishMessage(MQTT_TEMPERATURE, buffer);
|
|
Serial.print("\n");
|
|
}
|
|
|
|
bool openValve() {
|
|
digitalWrite(PIN_VALVE, HIGH);
|
|
digitalWrite(PIN_LED_G, LOW);
|
|
digitalWrite(PIN_LED_B, HIGH);
|
|
return true;
|
|
}
|
|
|
|
bool closeValve() {
|
|
digitalWrite(PIN_VALVE, LOW);
|
|
digitalWrite(PIN_LED_G, HIGH);
|
|
digitalWrite(PIN_LED_B, LOW);
|
|
return false;
|
|
}
|
|
|
|
void valveTask(void *parameter)
|
|
{
|
|
unsigned long valveTimeoutTimer = millis();
|
|
bool valveOpen = openValve();
|
|
|
|
while (valveOpen)
|
|
{
|
|
delay(500);
|
|
int mstValue = readCapacitiveSoilMoistureSensor();
|
|
|
|
if (millis() - valveTimeoutTimer >= MAX_VALVE_TIMEOUT)
|
|
{
|
|
valveOpen = closeValve();
|
|
}
|
|
// if (mstValue > 80) {
|
|
// valveOpen = closeValve();
|
|
// }
|
|
}
|
|
vTaskDelete(NULL);
|
|
}
|
|
|
|
void toggleValve()
|
|
{
|
|
xTaskCreate(
|
|
valveTask, /* Task function. */
|
|
"valveTask", /* String with name of task. */
|
|
10000, /* Stack size in bytes. */
|
|
NULL, /* Parameter passed as input of the task */
|
|
1, /* Priority of the task. */
|
|
NULL); /* Task handle. */
|
|
}
|