#include <Arduino_FreeRTOS.h>
void TaskReadButton(void *pvParameters);
void TaskControlLight(void *pvParameters);
int prev = 0;
QueueHandle_t buttonQueue;
QueueHandle_t lightQueue;
void setup() {
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(3, OUTPUT);
buttonQueue = xQueueCreate(5, sizeof(int));
lightQueue = xQueueCreate(5, sizeof(int));
xTaskCreate(TaskReadButton, "ReadButton", 128, NULL, 1, NULL);
xTaskCreate(TaskControlLight, "ControlLight", 128, NULL, 1, NULL);
}
void loop() {
// FreeRTOS handles tasks, loop remains empty
}
void TaskReadButton(void *pvParameters) {
int press;
while (1) {
press = !digitalRead(2);
if (press != prev) {
Serial.print(press ? "1" : "0");
xQueueSend(buttonQueue, &press, portMAX_DELAY);
}
prev = press;
vTaskDelay(pdMS_TO_TICKS(50));
}
}
void TaskControlLight(void *pvParameters) {
int light;
while (1) {
if (Serial.available()) {
light = Serial.read() - '0';
xQueueSend(lightQueue, &light, portMAX_DELAY);
}
if (xQueueReceive(lightQueue, &light, 0)) {
digitalWrite(3, light ? HIGH : LOW);
}
vTaskDelay(pdMS_TO_TICKS(50));
}
}