const int LED1_PIN = 2;
const int LED2_PIN = 4;
// این تابع در یک Task جداگانه اجرا میشود و کارش فقط چشمکزدن LED1 است
void taskBlinkLed1(void *parameter) {
pinMode(LED1_PIN, OUTPUT);
while (true) {
digitalWrite(LED1_PIN, HIGH);
vTaskDelay(500 / portTICK_PERIOD_MS); // معادل delay()، اما بدون مسدود کردن کل سیستم
digitalWrite(LED1_PIN, LOW);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
// این Task مستقل، با سرعتی متفاوت LED2 را چشمک میزند
void taskBlinkLed2(void *parameter) {
pinMode(LED2_PIN, OUTPUT);
while (true) {
digitalWrite(LED2_PIN, HIGH);
vTaskDelay(150 / portTICK_PERIOD_MS);
digitalWrite(LED2_PIN, LOW);
vTaskDelay(150 / portTICK_PERIOD_MS);
}
}
void setup() {
Serial.begin(115200);
// ساخت دو Task مستقل که همزمان و بدون تداخل روی دو هستهٔ ESP32 اجرا میشوند
xTaskCreate(taskBlinkLed1, "BlinkLed1", 1000, NULL, 1, NULL);
xTaskCreate(taskBlinkLed2, "BlinkLed2", 1000, NULL, 1, NULL);
}
void loop() {
// چون کل منطق داخل Taskهاست، اینجا کاری لازم نیست انجام شود
}