#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
int led_vermelho_carro = 15;
int led_amarelo_carro = 2;
int led_verde_carro = 4;
int led_vermelho_pessoa = 5;
int led_verde_pessoa = 22;
int botao = 23;
volatile bool pedestre_solicitou = false;
void piscarVermelho() {
for (int i = 0; i < 10; i++) {
digitalWrite(led_vermelho_pessoa, HIGH);
vTaskDelay(pdMS_TO_TICKS(300));
digitalWrite(led_vermelho_pessoa, LOW);
vTaskDelay(pdMS_TO_TICKS(300));
}
}
void tarefaVeiculo(void *pvParameters) {
while (true) {
digitalWrite(led_verde_carro, HIGH);
digitalWrite(led_amarelo_carro, LOW);
digitalWrite(led_vermelho_carro, LOW);
digitalWrite(led_verde_pessoa, LOW);
digitalWrite(led_vermelho_pessoa, HIGH);
while (!pedestre_solicitou) {
vTaskDelay(pdMS_TO_TICKS(100));
}
digitalWrite(led_verde_carro, LOW);
digitalWrite(led_amarelo_carro, HIGH);
digitalWrite(led_vermelho_carro, LOW);
vTaskDelay(pdMS_TO_TICKS(2000));
digitalWrite(led_verde_carro, LOW);
digitalWrite(led_amarelo_carro, LOW);
digitalWrite(led_vermelho_carro, HIGH);
digitalWrite(led_vermelho_pessoa, LOW);
digitalWrite(led_verde_pessoa, HIGH);
vTaskDelay(pdMS_TO_TICKS(2000));
digitalWrite(led_verde_pessoa, LOW);
piscarVermelho();
pedestre_solicitou = false;
}
}
void tarefaPedestre(void *pvParameters) {
while (true) {
vTaskDelay(pdMS_TO_TICKS(2000));
}
}
void tarefaBotao(void *pvParameters) {
while (true) {
if (digitalRead(botao) == LOW) {
pedestre_solicitou = true;
}
vTaskDelay(pdMS_TO_TICKS(100));
}
}
void setup() {
pinMode(led_vermelho_carro, OUTPUT);
pinMode(led_amarelo_carro, OUTPUT);
pinMode(led_verde_carro, OUTPUT);
pinMode(led_vermelho_pessoa, OUTPUT);
pinMode(led_verde_pessoa, OUTPUT);
pinMode(botao, INPUT_PULLUP);
xTaskCreate(tarefaVeiculo, "Veiculo", 2048, NULL, 1, NULL);
xTaskCreate(tarefaPedestre, "Pedestre", 2048, NULL, 1, NULL);
xTaskCreate(tarefaBotao, "Botao", 1024, NULL, 2, NULL);
}
void loop() {}