/*
Autor: Paulo Vitor Gomes Rosendo
GitHub: https://github.com/pvRosendo
Explicação: Sistema montado utilizando Leds para ensinamento da utilização de semáforos no ESP32.
*/
#define led1 2
#define led2 4
SemaphoreHandle_t semaforo = xSemaphoreCreateMutex();//cria um identificador de semáforo mutex
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
Serial.begin(115200);
delay(100);
xTaskCreatePinnedToCore(piscar_led_vermelho,"vermelho",1000,NULL,1,NULL,1);
delay(100);
xTaskCreatePinnedToCore(piscar_led_azul,"azul",1000,NULL,2,NULL,1);
}
void loop() {
}
void piscar_led_vermelho(void*){
for(;;){
if(semaforo != NULL){
if(xSemaphoreTake(semaforo, portMAX_DELAY)){
delay(500);
digitalWrite(led2, HIGH);
delay(500);
digitalWrite(led2,LOW);
}
xSemaphoreGive(semaforo);
Serial.println("azul");
}
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
}
void piscar_led_azul(void*){
for(;;){
if(semaforo != NULL){
if(xSemaphoreTake(semaforo, portMAX_DELAY)){
delay(500);
digitalWrite(led1, HIGH);
delay(500);
digitalWrite(led1, LOW);
}
xSemaphoreGive(semaforo);
Serial.println("vermelho");
}
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
}