//#include <Arduino_FreeRTOS.h>
// Define the queue handles
QueueHandle_t queue1;
QueueHandle_t queue2;
// Task prototypes
void TaskA(void *pvParameters);
void TaskB(void *pvParameters);
// Global variable to store delay value
int t = 1000; // Default delay value
void setup() {
Serial.begin(115200);
Serial.println("Setup completed.");
// Create the queues
queue1 = xQueueCreate(10, sizeof(int)); // Queue size of 10, each element is an integer
queue2 = xQueueCreate(10, sizeof(char*)); // Queue size of 10, each element is a pointer to char
pinMode(26, OUTPUT); // Set pin 26 as output for the LED
Serial.println("Pin 26 configured as OUTPUT.");
// Create TaskA and TaskB
xTaskCreate(TaskA, "TaskA", 1000, NULL, 1, NULL);
xTaskCreate(TaskB, "TaskB", 1000, NULL, 1, NULL);
Serial.println("Tasks created.");
}
void loop() {
// Read user input and send to queue1 if it's a number
if (Serial.available() > 0) {
String input = Serial.readStringUntil('\n');
if (input.toInt() != 0) { // Check if input is a number
int num = input.toInt();
xQueueSend(queue1, &num, portMAX_DELAY);
} else {
Serial.println("Invalid input. Please enter a number.");
}
}
}
void TaskA(void *pvParameters) {
int message;
while (1) {
// Print any messages from queue1
if (xQueueReceive(queue1, &message, portMAX_DELAY) == pdPASS) {
Serial.print("TaskA received: ");
Serial.println(message);
} else {
Serial.println("No message received from queue1.");
}
// Check if there is new delay value from queue1
if (xQueueReceive(queue1, &t, 0) == pdPASS) {
Serial.print("New delay value: ");
Serial.println(t);
}
delay(t); // Delay with updated delay value
}
}
void TaskB(void *pvParameters) {
int count = 0;
while (1) {
// Blink LED with delay t
digitalWrite(26, HIGH);
delay(t);
// vTaskDelay(t / portTICK_PERIOD_MS);
digitalWrite(26, LOW);
//vTaskDelay(t / portTICK_PERIOD_MS);
delay(t);
// Increment count and check if it's 100
count++;
if (count == 100) {
// Send "Blinked" string to queue2
char *msg = "Blinked";
xQueueSend(queue2, &msg, portMAX_DELAY);
count = 0; // Reset count
}
}
}