//inclusão de bibliotecas
#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <freertos/queue.h>
//Definições de pré processamento
#define LED 2
//handle de filas
QueueHandle_t xFila, xFila1;
//handle de tarefas
TaskHandle_t taskDhtHandle, taskLcdHandle, taskHandle;
//protótipos da tarefas e funções auxiliares
void TaskDht(void *pvParameters);
void TaskLcd(void *pvParameters);
//declarções de variáveis do Rtos e genéricas
BaseType_t xSucessTaskDht, xSucessTaskLcd;
//Inicialização de hardware e parâmetros de software
void setup() {
Serial.begin(115200);
pinMode(LED, OUTPUT);
//criar fila
xFila=xQueueCreate(10, sizeof(int8_t));
//teste da criação da fila
if(xFila==NULL)Serial.println("Criação da fila falhou");
else Serial.println("Fila criada = xFila");
//criar as tarefas
xSucessTaskDht=xTaskCreatePinnedToCore(TaskDht,"TaskDht",configMINIMAL_STACK_SIZE+756,NULL,1,&taskDhtHandle,1);
if(xSucessTaskDht==pdFAIL) Serial.println("Falha na criação da Task para o DHT");
xSucessTaskLcd=xTaskCreatePinnedToCore(TaskLcd,"TaskLcd",configMINIMAL_STACK_SIZE+756,NULL,1,&taskLcdHandle,0);
if(xSucessTaskLcd==pdFAIL) Serial.println("Falha na criação da Task para o LCD");
}
// funções recorrentes e tarefas
void loop() {
digitalWrite(LED,!digitalRead(LED));
vTaskDelay(pdMS_TO_TICKS(1000));
}
void TaskDht(void *PvParameters){
int contador = 0;
while (true)
{
if(contador<=10){
xQueueSend(xFila,&contador,portMAX_DELAY);
contador++;
}
else contador=0;
}
}
void TaskLcd(void *pvParameters){
int valorRecebido;
while (true)
{
xQueueReceive(xFila,&valorRecebido,pdMS_TO_TICKS(500));
Serial.println("o valor recebido: "+ String(valorRecebido));
vTaskDelay(1000);
}
}