smart_garden/src/peripherals.cpp

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