#include <DHT.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
// Nota: Removemos o <semphr.h> pois não temos mais recursos compartilhados (como o LCD)
// Se você quisesse proteger a Serial, poderia manter o semáforo.
// --- DEFINIÇÕES DE HARDWARE ---
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define POT_PIN 34
#define LED_PIN 2 // Geralmente o LED integrado do ESP32 é o pino 2
// --- HANDLES DAS TASKS ---
TaskHandle_t TaskTempHandle;
TaskHandle_t TaskLedHandle; // Mudamos de Count para LED
TaskHandle_t TaskPotHandle;
TaskHandle_t TaskMonitorHandle;
// --- PROTÓTIPOS ---
void Task_Temperatura(void *pvParameters);
void Task_LED(void *pvParameters); // Nova função do LED
void Task_Potenciometro(void *pvParameters);
void Task_MonitorCore(void *pvParameters);
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(POT_PIN, INPUT);
pinMode(LED_PIN, OUTPUT); // Configura o pino do LED
Serial.println("INICIANDO SISTEMA SEM LCD...");
// --- CRIAÇÃO DAS TAREFAS ---
// 1. Temperatura (Core 0)
xTaskCreatePinnedToCore(Task_Temperatura, "TaskTemp", 4096, NULL, 1, &TaskTempHandle, 0);
// 2. LED Piscante (Substituindo o Contador) - Core 1
xTaskCreatePinnedToCore(Task_LED, "TaskLED", 2048, NULL, 1, &TaskLedHandle, 1);
// 3. Potenciômetro (Core 1)
xTaskCreate(Task_Potenciometro, "TaskPot", 4096, NULL, 2, &TaskPotHandle);
// 4. Monitor (Sem Core Fixo)
xTaskCreate(Task_MonitorCore, "TaskMonitor", 2048, NULL, 3, &TaskMonitorHandle);
}
void loop() {
vTaskDelete(NULL);
}
// --- TAREFA 1: Temperatura (Agora imprime no Serial) ---
void Task_Temperatura(void *pvParameters) {
for(;;) {
int t = dht.readTemperature();
// Como removemos o LCD, mandamos para o computador
Serial.print("[Temperatura]: ");
if (isnan(t)) {
Serial.println("Erro sensor");
} else {
Serial.print(t, 1);
Serial.println(" C");
}
vTaskDelay(2000 / portTICK_PERIOD_MS); // Leitura mais lenta (2s)
}
}
// --- TAREFA 2: LED (Substitui o Contador) ---
void Task_LED(void *pvParameters) {
for(;;) {
// Liga o LED
digitalWrite(LED_PIN, HIGH);
vTaskDelay(500 / portTICK_PERIOD_MS); // Fica ligado 500ms
// Desliga o LED
digitalWrite(LED_PIN, LOW);
vTaskDelay(500 / portTICK_PERIOD_MS); // Fica desligado 500ms
}
}
// --- TAREFA 3: Potenciômetro ---
void Task_Potenciometro(void *pvParameters) {
for(;;) {
int valor = analogRead(POT_PIN);
Serial.print("[Potenciometro]: ");
Serial.println(valor);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
// --- TAREFA 4: Monitor ---
void Task_MonitorCore(void *pvParameters) {
for(;;) {
// Apenas para não poluir muito o monitor, aumentei o tempo
// Serial.print("--- [Monitor] Core ID: ");
// Serial.println(xPortGetCoreID());
vTaskDelay(5000 / portTICK_PERIOD_MS);
}
}