#include <freertos/FreeRTOS.h>
#include <esp_system.h>
#include <esp_log.h>
#include <freertos/task.h>
#include <freertos/timers.h>
#include <freertos/semphr.h>
#include "driver/adc.h"
// Pinos utilizados nos LEDs
int led1 = 2; // LED vermelho
int led2 = 4; // LED amarelo
int led3 = 15; // LEd verde
// Pinos utilizados para os botões
const int BUTTON1 = 13; //botão azul
const int BUTTON2 = 12; //botão verde
TaskHandle_t xTaskHandle1; // TaskHandle
TaskHandle_t xTaskHandle2; // TaskHandle
TaskHandle_t xTaskHandle3; // TaskHandle
void toggleLED(void * parameter){
for(;;){ // loop infinito
// Ligar LED
digitalWrite(led1, HIGH);
// A tarefa é pausada por 500ms
vTaskDelay(1000 / portTICK_PERIOD_MS);
// O LED 1 é desligado
digitalWrite(led1, LOW);
// A tarefa é pausada por 500ms
vTaskDelay(1000 / portTICK_PERIOD_MS);
boolean parado; //controle da parada, necessario para evitar overflow
if(digitalRead(BUTTON1)==LOW){
vTaskSuspend(xTaskHandle2);
parado = true;
}
if(digitalRead(BUTTON1)==HIGH & parado == true){
vTaskResume(xTaskHandle2);
}
}
}
void toggleLED2(void * parameter){
for(;;){ // loop infinito
// Ligar LED
digitalWrite(led2, HIGH);
// Pausa a tarefa por 500ms
vTaskDelay(500 / portTICK_PERIOD_MS);
// Desligar LED
digitalWrite(led2, LOW);
// Pausa a tarefa por 500ms
vTaskDelay(500 / portTICK_PERIOD_MS);
boolean parado; //controle da parada, necessario para evitar overflow
if(digitalRead(BUTTON2)==LOW){
vTaskSuspend(xTaskHandle3);
parado = true;
}
if(digitalRead(BUTTON2)==HIGH & parado == true){
vTaskResume(xTaskHandle3);
}
}
}
void toggleLED3(void * parameter){
for(;;){ // loop infinito
// Ligar LED
digitalWrite(led3, HIGH);
// Pausa a tarefa por 500ms
vTaskDelay(250 / portTICK_PERIOD_MS);
// Desligar LED
digitalWrite(led3, LOW);
// Pausa a tarefa por 500ms
vTaskDelay(250 / portTICK_PERIOD_MS);
}
}
extern "C" void app_main(){
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(BUTTON1, INPUT_PULLUP);
xTaskCreate(
toggleLED, // Função a ser chamada
"Toggle LED", // Nome da tarefa
1000, // Tamanho (bytes)
NULL, // Parametro a ser passado
1, // Prioridade da Tarefa
&xTaskHandle1 // Task handle
);
xTaskCreate(
toggleLED2, // Função a ser chamada
"Toggle LED", // Nome da tarefa
1000, // Tamanho (bytes)
NULL, // Parametro a ser passado
1, // Prioridade da Tarefa
&xTaskHandle2 // Task handle
);
xTaskCreate(
toggleLED3, // Função a ser chamada
"Toggle LED", // Nome da tarefa
1000, // Tamanho (bytes)
NULL, // Parametro a ser passado
1, // Prioridade da Tarefa
&xTaskHandle3 // Task handle
);
}