#define MAX_CONEXOES 3 // Número máximo de conexões simultâneas
SemaphoreHandle_t conexao_semaforo;
void tarefaCliente(void *pvParameters) {
while (1) {
// Aguarda uma conexão disponível
if (xSemaphoreTake(conexao_semaforo, portMAX_DELAY) == pdTRUE) {
Serial.println("Conexão estabelecida! Processando dados...");
// Obtém e imprime o nome da tarefa
Serial.print("Executando: ");
Serial.println(pcTaskGetName(NULL));
vTaskDelay(pdMS_TO_TICKS(2000)); // Simula o uso do recurso
Serial.println("Conexão encerrada. Recurso liberado.");
xSemaphoreGive(conexao_semaforo); // Libera o recurso
}
vTaskDelay(pdMS_TO_TICKS(1000)); // Pequeno atraso antes de tentar novamente
}
}
void setup() {
Serial.begin(9600);
char task_name[12];
// Criação do semáforo contador com até MAX_CONEXOES simultâneas
conexao_semaforo = xSemaphoreCreateCounting(MAX_CONEXOES, MAX_CONEXOES);
// Criação de múltiplas tarefas simulando clientes
for (int i = 0; i < 5; i++) {
sprintf(task_name, "Cliente %i", i);
xTaskCreate(tarefaCliente, task_name, configMINIMAL_STACK_SIZE, NULL, 1, NULL);
}
}
void loop() {
// O código nunca deve chegar aqui
delay(10);
}