#include #include //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. */ }