#include <driver/gpio.h>
#include <esp_log.h>
#include <freertos/FreeRTOS.h>
#include <freertos/queue.h>
#include <freertos/task.h>
#include <freertos/semphr.h>
#define RED_LED_GPIO GPIO_NUM_33
#define BLUE_LED_GPIO GPIO_NUM_21
#define RED_ALARM_BUTTON_GPIO GPIO_NUM_1
#define BLUE_ALARM_BUTTON_GPIO GPIO_NUM_2
#define RED_ACK_BUTTON_GPIO GPIO_NUM_3
#define BLUE_ACK_BUTTON_GPIO GPIO_NUM_4
void controlTaskRed(void *pvParameters);
void blinkTaskRed(void *pvParameters);
void redAckButtonTask(void *pvParameters);
void controlTaskBlue(void *pvParameters);
void blinkTaskBlue(void *pvParameters);
void blueAckButtonTask(void *pvParameters);
TaskHandle_t controlTaskRedHandle; // Handle for ControlTaskRed task
TaskHandle_t redBlinkTaskHandle; // Handle for red blink task
TaskHandle_t redAckButtonTaskHandle; // Handle for red ack button task
TaskHandle_t controlTaskBlueHandle; // Handle for ControlTaskBlue task
TaskHandle_t blueBlinkTaskHandle; // Handle for blue blink task
TaskHandle_t blueAckButtonTaskHandle; // Handle for blue ack button task
SemaphoreHandle_t redAckSemaphore; // Semaphore to synchronize red acknowledgment
SemaphoreHandle_t blueAckSemaphore; // Semaphore to synchronize blue acknowledgment
extern "C" void app_main()
{
// Create semaphores
//redAckSemaphore = xSemaphoreCreateBinary();
//blueAckSemaphore = xSemaphoreCreateBinary();
// Create tasks
xTaskCreate(controlTaskRed, "ControlTaskRed", 2048, NULL, 1, &controlTaskRedHandle);
//xTaskCreate(controlTaskBlue, "ControlTaskBlue", 2048, NULL, 1, &controlTaskBlueHandle);
xTaskCreate(blinkTaskRed, "BlinkTaskRed", 2048, NULL, 2, &redBlinkTaskHandle);
//xTaskCreate(blinkTaskBlue, "BlinkTaskBlue", 2048, NULL, 2, &blueBlinkTaskHandle);
//xTaskCreate(redAckButtonTask, "RedAckButtonTask", 2048, NULL, 3, &redAckButtonTaskHandle);
//xTaskCreate(blueAckButtonTask, "BlueAckButtonTask", 2048, NULL, 3, &blueAckButtonTaskHandle);
}
void controlTaskRed(void *pvParameters)
{
while (1)
{
// Check red alarm button state
if (gpio_get_level(RED_ALARM_BUTTON_GPIO) == 1)
{
// Trigger actions when red alarm button is pressed
// For example, start blinking the red LED
xTaskNotify(redBlinkTaskHandle, 1, eSetBits);
}
// Check red acknowledgment button state
if (gpio_get_level(RED_ACK_BUTTON_GPIO) == 1)
{
// Trigger actions when red ack button is pressed
// For example, acknowledge the red alarm
xSemaphoreGive(redAckSemaphore);
}
vTaskDelay(pdMS_TO_TICKS(100)); // Adjust the delay as needed
}
}
void blinkTaskRed(void *pvParameters)
{
while (1)
{
// Wait for notification from controlTaskRed
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
// Blink the red LED
for (int i = 0; i < 5; i++)
{
gpio_set_level(RED_LED_GPIO, 1);
vTaskDelay(pdMS_TO_TICKS(200));
gpio_set_level(RED_LED_GPIO, 0);
vTaskDelay(pdMS_TO_TICKS(200));
}
}
}
void controlTaskBlue(void *pvParameters)
{
while (1)
{
// Check blue alarm button state
if (gpio_get_level(BLUE_ALARM_BUTTON_GPIO) == 1)
{
// Trigger actions when blue alarm button is pressed
// For example, start blinking the blue LED
xTaskNotify(blueBlinkTaskHandle, 1, eSetBits);
}
// Check blue acknowledgment button state
if (gpio_get_level(BLUE_ACK_BUTTON_GPIO) == 1)
{
// Trigger actions when blue ack button is pressed
// For example, acknowledge the blue alarm
xSemaphoreGive(blueAckSemaphore);
}
vTaskDelay(pdMS_TO_TICKS(100)); // Adjust the delay as needed
}
}
void blinkTaskBlue(void *pvParameters)
{
while (1)
{
// Wait for notification from controlTaskRed
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
// Blink the red LED
for (int i = 0; i < 5; i++)
{
gpio_set_level(BLUE_LED_GPIO, 1);
vTaskDelay(pdMS_TO_TICKS(400));
gpio_set_level(BLUE_LED_GPIO, 0);
vTaskDelay(pdMS_TO_TICKS(400));
}
}
}
void redAckButtonTask(void *pvParameters)
{
while (1)
{
// Wait for red acknowledgment semaphore
if (xSemaphoreTake(redAckSemaphore, portMAX_DELAY) == pdTRUE)
{
// Actions when red acknowledgment button is pressed
// For example, stop blinking the red LED
xTaskNotifyGive(redBlinkTaskHandle);
}
vTaskDelay(pdMS_TO_TICKS(100)); // Adjust the delay as needed
}
}
void blueAckButtonTask(void *pvParameters)
{
while (1)
{
// Wait for blue acknowledgment semaphore
if (xSemaphoreTake(blueAckSemaphore, portMAX_DELAY) == pdTRUE)
{
// Actions when blue acknowledgment button is pressed
// For example, stop blinking the blue LED
xTaskNotifyGive(blueBlinkTaskHandle);
}
vTaskDelay(pdMS_TO_TICKS(100)); // Adjust the delay as needed
}
}
Loading
franzininho-wifi
franzininho-wifi