#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include <stdbool.h>
#define STACK_SIZE 2048 // Define o tamanho da pilha para as tarefas
void kConfigPin(); // Função para iniciar os pinos
void vTaskCode1(void *pvParameters); // Função que irá fazer a task 1
void vTaskCode2(void *pvParameters); // Função que irá fazer a task 2
void vCreatedtask1(void); // Função que cria a task 1
void vCreatedtask2(void); // Função que cria a task 2
bool StatePin26 = true; // Variáveis booleanas para o estado dos pinos
bool StatePin27 = true;
void app_main() {
kConfigPin(); // Configura os pinos
// Criação das tarefas
vCreatedtask1();
vCreatedtask2();
// O loop principal fica em espera
while (true) {
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void kConfigPin() {
esp_err_t ret;
// Configuração do pino 26
gpio_config_t configPin26 = {
.pin_bit_mask = (1ULL << GPIO_NUM_26),
.mode = GPIO_MODE_OUTPUT,
.pull_up_en = GPIO_PULLUP_ENABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE
};
// Configuração do pino 27
gpio_config_t configPin27 = {
.pin_bit_mask = (1ULL << GPIO_NUM_27),
.mode = GPIO_MODE_OUTPUT,
.pull_up_en = GPIO_PULLUP_ENABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE
};
// Configura o pino 26
ret = gpio_config(&configPin26);
if (ret != ESP_OK) {
printf("Error na definição do pino 26\n");
} else {
printf("Sucesso na definição do pino 26\n");
}
// Configura o pino 27
ret = gpio_config(&configPin27);
if (ret != ESP_OK) {
printf("Error na definição do pino 27\n");
} else {
printf("Sucesso na definição do pino 27\n");
}
}
//função que a tarefa irá executar
void vTaskCode1(void *pvParameters) {
for (;;) {
vTaskDelay(1000 / portTICK_PERIOD_MS);
StatePin26 = !StatePin26;
gpio_set_level(GPIO_NUM_26, StatePin26);
}
}
//função que a tarefa irá executar
void vTaskCode2(void *pvParameters) {
for (;;) {
vTaskDelay(250 / portTICK_PERIOD_MS);
StatePin27 = !StatePin27;
gpio_set_level(GPIO_NUM_27, StatePin27);
}
}
//criação da tarefa 1
void vCreatedtask1(void) {
static uint8_t ucParameterToPass;
TaskHandle_t xHandle = NULL;
// Criação da tarefa 1
xTaskCreate(vTaskCode1, "TAREFA1", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle);
configASSERT(xHandle);
}
//criação da tarefa 2
void vCreatedtask2(void) {
static uint8_t ucParameterToPass;
TaskHandle_t xHandle = NULL;
// Criação da tarefa 2
xTaskCreate(vTaskCode2, "TAREFA2", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle);
configASSERT(xHandle);
}