#if CONFIG_FREERTOS_UNICORE
#define ARDUINO_RUNNING_CORE 0
#else
#define ARDUINO_RUNNING_CORE 1
#endif
#define ANALOG_INPUT_PIN 34
#define LED_OUTPUT_PIN 32
// 멀티 TASK 선언
void TaskBlink( void *pvParameters );
void TaskAnalogRead( void *pvParameters );
uint32_t blink_delay = 1000;
void setup() {
Serial.begin(115200);
xTaskCreatePinnedToCore(
TaskBlink
, "Task Blink"
, 2048
, NULL
, 1 // 높을수록 먼저 처리
, NULL
, ARDUINO_RUNNING_CORE
);
xTaskCreatePinnedToCore(
TaskAnalogRead
, "Analog Read"
, 2048 // Stack size
, NULL
, 2 // 높을수록 먼저 처리
, NULL
, ARDUINO_RUNNING_CORE
);
Serial.printf("Basic Multi Threading Arduino Example\n");
}
void loop(){
delay(10000);
}
void TaskBlink(void *pvParameters){
(void) pvParameters;
pinMode(LED_OUTPUT_PIN, OUTPUT);
for (;;){
digitalWrite(LED_OUTPUT_PIN, HIGH);
vTaskDelay(blink_delay);
digitalWrite(LED_OUTPUT_PIN, LOW);
vTaskDelay(blink_delay);
Serial.print("TASK_BLINK RUNNING\t delaytime :: ");
Serial.println(blink_delay);
}
}
void TaskAnalogRead(void *pvParameters){
(void) pvParameters;
for (;;){
int sensorValue = analogRead(ANALOG_INPUT_PIN);
blink_delay = sensorValue;
Serial.print("TASK_ANALOG RUNNING\t ADC :: ");
Serial.println(sensorValue);
vTaskDelay(100); // 0.1s delay
}
}