#include <Arduino.h>
//#include "freertos/FreeRTOS.h"
//#include "freertos/task.h"
TaskHandle_t Task1;
TaskHandle_t Task2;
TaskHandle_t Task3;
TaskHandle_t Task4;
// Призначаємо піни світлодіодів
const int led1 = 2;
const int led2 = 4;
const int led3 = 5;
const int led4 = 18;
#define LCD_ADDRESS 0x27
#define LCD_COLUMNS 16
#define LCD_ROWS 2
void setup() {
Serial.begin(115200);// швидкість передачі даних
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
//Створюємо задачу, яка буде виконуватись на ядрі 0 з максимальним пріоритетом 1
xTaskCreatePinnedToCore(
Task1code, /* Назва функції задачі. */
"Task1", /* Її імя. */
10000, /* Розмір стеку функції*/
NULL, /* Параметри */
1, /* Пріоритет */
&Task1, /* Дескриптор задачі для відслідкування */
0); /* Вказуємо пін для даного ядра */
delay(500);
xTaskCreatePinnedToCore(Task2code, "Task2", 10000, NULL, 1, &Task2, 1);
// Створюємо 2 задачу, яка буде виконуватись на ядре 1 з максимальним пріоритетом (1)
delay(500);
xTaskCreatePinnedToCore(Task3code, "Task3", 10000, NULL, 0, &Task3, 0);
// Створюємо 3 задачу, яка буде виконуватись на ядре 0 з пріоритетом (1)
xTaskCreatePinnedToCore(Task4code, "Task4", 10000, NULL, 1, &Task4, 1);
// Створюємо 4 задачу, яка буде виконуватись на ядре 1 з пріоритетом 1
delay(500);
}
// Task1code: мигає світлодіодом раз в 2 секунди
void Task1code(void *pvParameters) {
Serial.println("Задача 1");
for (;;) {
digitalWrite(led1, HIGH);
vTaskDelay(pdMS_TO_TICKS(2000));
digitalWrite(led1, LOW);
vTaskDelay(pdMS_TO_TICKS(1000));
Serial.print("*Виконання задачі 1 на ядрі ");
Serial.println(xPortGetCoreID());
}
}
// Task1code: мигає світлодіодом раз в 2 секунди
void Tempreture(void *pvParameters) {
Serial.println("Задача 1");
pinMode(15,INPUT);
for (;;) {
}
}
void TaskDisplayLCD(void *pvParameters) {
(void)pvParameters;
// Convert the analog value into lux value:
lcd.init();
lcd.backlight();
for (;;) {
lcd.setCursor(0, 0);
lcd.print("jgbcdfb")
vTaskDelay(100 / portTICK_PERIOD_MS);
}
}
// Task2code: мигає раз у 0,7 секунди
void Task2code(void *pvParameters) {
Serial.println("Задача 2");
for (;;) {
digitalWrite(led2, HIGH);
vTaskDelay(pdMS_TO_TICKS(700));
digitalWrite(led2, LOW);
vTaskDelay(pdMS_TO_TICKS(700));
Serial.print("**Виконання задачі 2 на ядрі ");
Serial.println(xPortGetCoreID());
}
}
// Task2code: мигає раз у 0,1 секунди
void Task3code(void *pvParameters) {
Serial.println("Задача 3");
for (;;) {
digitalWrite(led3, HIGH);
vTaskDelay(pdMS_TO_TICKS(100)); // Невелика затримка, щоб зменшити навантаження
digitalWrite(led3, LOW);
vTaskDelay(pdMS_TO_TICKS(100)); // Невелика затримка, щоб зменшити навантаження
Serial.print("***Виконання задачі 3 на ядрі ");
Serial.println(xPortGetCoreID());
}
}
// Task4code: вмикання та вимк. раз на 0,5 сек
void Task4code(void *pvParameters) {
Serial.println("Задача 4");
pinMode(led4, OUTPUT);
for (;;) {
digitalWrite(led4, HIGH);
vTaskDelay(pdMS_TO_TICKS(500)); // Увімкнути світлодіод на 0,5 секунди
digitalWrite(led4, LOW);
vTaskDelay(pdMS_TO_TICKS(500)); // Вимкнути світлодіод на 0,5 секунди
Serial.print("****Виконання задачі 4 на ядрі ");
Serial.println(xPortGetCoreID());
}
}
void loop() {
// Ваш код для функції loop (якщо потрібно)
Serial.print("******Виконання у loop() на ядрі ");
Serial.println(xPortGetCoreID());
vTaskDelay(pdMS_TO_TICKS(500));
}