/* --------------------------------------------------------------
Application: 01 - Rev1
Release Type: Sub - Optimal Baseline Code
Class: Real Time Systems - Su 2025
AI Use: Commented inline
---------------------------------------------------------------*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#define LED_PIN GPIO_NUM_2
#define LED_OFF 0
#define LED_ON 1
#define SHORT_DURATION 250
#define LONG_DELAY 10000
#define TINY_DURATION 50
// Global LED state variable
int ledState = LED_OFF;
void blink_task(void *pvParameters) {
while (1) {
ledState = !(ledState); // Toggle LED state
gpio_set_level(LED_PIN, ledState); // Set GPIO output
vTaskDelay(pdMS_TO_TICKS(SHORT_DURATION));
// vTaskDelay(pdMS_TO_TICKS(TINY_DURATION));
}
}
void print_task(void *pvParameters) {
while (1) {
printf("System alive and transmitting, time = %lu ms, LED = %s\n",
(unsigned long)(xTaskGetTickCount() * portTICK_PERIOD_MS),
ledState ? "ON" : "OFF");
// vTaskDelay(pdMS_TO_TICKS(LONG_DELAY));
// vTaskDelay(pdMS_TO_TICKS(TINY_DURATION));
}
}
void app_main() {
gpio_reset_pin(LED_PIN);
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
// Initially start with a LED_OFF
gpio_set_level(LED_PIN, ledState); // Ensure it starts in the OFF state
xTaskCreate(blink_task, "BlinkTask", 2048, NULL, 1, NULL);
xTaskCreate(print_task, "PrintTask", 2048, NULL, 1, NULL);
}