#include <driver/gpio.h>
#include <esp_log.h>
#include <freertos/FreeRTOS.h>
#include <freertos/queue.h>
#include <freertos/task.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 setup() {
}
QueueHandle_t redSemaphore, blueSemaphore;
void controlTaskRed(void *pvParameters) {
while (1) {
if (gpio_get_level(RED_ALARM_BUTTON_GPIO) == 1 && uxQueueMessagesWaiting(redSemaphore) == 0) {
xQueueSend(redSemaphore, NULL, portMAX_DELAY);
ESP_LOGI("APP", "ControlTaskRed: Sent message to redSemaphore");
}
vTaskDelay(50 / portTICK_PERIOD_MS);
}
}
void controlTaskBlue(void *pvParameters) {
while (1) {
if (gpio_get_level(BLUE_ALARM_BUTTON_GPIO) == 1 && uxQueueMessagesWaiting(blueSemaphore) == 0) {
xQueueSend(blueSemaphore, NULL, portMAX_DELAY);
ESP_LOGI("APP", "ControlTaskBlue: Sent message to blueSemaphore");
}
vTaskDelay(50 / portTICK_PERIOD_MS);
}
}
void blinkTaskRed(void *pvParameters) {
while (1) {
if (uxQueueMessagesWaiting(redSemaphore) > 0) {
gpio_set_level(RED_LED_GPIO, 1);
vTaskDelay(100 / portTICK_PERIOD_MS);
gpio_set_level(RED_LED_GPIO, 0);
vTaskDelay(200 / portTICK_PERIOD_MS);
ESP_LOGI("APP", "BlinkTaskRed: LED blinked");
}
vTaskDelay(50 / portTICK_PERIOD_MS);
}
}
void blinkTaskBlue(void *pvParameters) {
while (1) {
if (uxQueueMessagesWaiting(blueSemaphore) > 0) {
gpio_set_level(BLUE_LED_GPIO, 1);
vTaskDelay(100 / portTICK_PERIOD_MS);
gpio_set_level(BLUE_LED_GPIO, 0);
vTaskDelay(200 / portTICK_PERIOD_MS);
ESP_LOGI("APP", "BlinkTaskBlue: LED blinked");
}
vTaskDelay(50 / portTICK_PERIOD_MS);
}
}
void ackTask(void *pvParameters) {
while (1) {
if (gpio_get_level(RED_ACK_BUTTON_GPIO) == 1 && uxQueueMessagesWaiting(redSemaphore) > 0) {
xQueueReceive(redSemaphore, NULL, 0);
ESP_LOGI("APP", "AckTask: Received message from redSemaphore");
}
if (gpio_get_level(BLUE_ACK_BUTTON_GPIO) == 1 && uxQueueMessagesWaiting(blueSemaphore) > 0) {
xQueueReceive(blueSemaphore, NULL, 0);
ESP_LOGI("APP", "AckTask: Received message from blueSemaphore");
}
vTaskDelay(50 / portTICK_PERIOD_MS);
}
}
void app_main() {
redSemaphore = xQueueCreate(1, 0);
blueSemaphore = xQueueCreate(1, 0);
ESP_LOGI("APP", "LED Initialization");
// Sytytä punainen LED 500 ms ajaksi
gpio_set_level(RED_LED_GPIO, 1);
vTaskDelay(500 / portTICK_PERIOD_MS);
gpio_set_level(RED_LED_GPIO, 0);
// Sytytä sininen LED 500 ms ajaksi
gpio_set_level(BLUE_LED_GPIO, 1);
vTaskDelay(500 / portTICK_PERIOD_MS);
gpio_set_level(BLUE_LED_GPIO, 0);
ESP_LOGI("APP", "Task Creation");
xTaskCreate(controlTaskRed, "ControlTaskRed", 750, NULL, 0, NULL);
xTaskCreate(controlTaskBlue, "ControlTaskBlue", 750, NULL, 0, NULL);
xTaskCreate(blinkTaskRed, "BlinkTaskRed", 750, NULL, 0, NULL);
xTaskCreate(blinkTaskBlue, "BlinkTaskBlue", 750, NULL, 0, NULL);
xTaskCreate(ackTask, "AckTask", 750, NULL, 0, NULL);
}
void loop() {
// Empty, neededo
}Loading
franzininho-wifi
franzininho-wifi