#define PIN_DIGITAL 2 // Pin digital para leer
#define PIN_ANALOG A0 // Pin analógico para leer
SemaphoreHandle_t serialSemaphore;
void TaskDigital(void *pvParameters) {
(void) pvParameters;
for (;;) {
if (xSemaphoreTake(serialSemaphore, portMAX_DELAY) == pdTRUE) {
Serial.print("Digital Pin Value: ");
Serial.println(digitalRead(PIN_DIGITAL));
xSemaphoreGive(serialSemaphore);
}
vTaskDelay(pdMS_TO_TICKS(10));
}
}
void TaskAnalog(void *pvParameters) {
(void) pvParameters;
for (;;) {
if (xSemaphoreTake(serialSemaphore, portMAX_DELAY) == pdTRUE) {
Serial.print("Analog Value: ");
Serial.println(analogRead(PIN_ANALOG));
xSemaphoreGive(serialSemaphore);
}
vTaskDelay(pdMS_TO_TICKS(10));
}
}
void setup() {
Serial.begin(115200);
pinMode(PIN_DIGITAL, INPUT);
// Crear semáforo binario
serialSemaphore = xSemaphoreCreateBinary();
// Inicializar semáforo binario (se libera para que la primera tarea pueda acceder al recurso)
xSemaphoreGive(serialSemaphore);
// Crear tarea para leer el pin digital en el núcleo 0
xTaskCreatePinnedToCore(TaskDigital, "TaskDigital", 10000, NULL, 1, NULL, 0);
// Crear tarea para leer el pin analógico en el núcleo 1
xTaskCreatePinnedToCore(TaskAnalog, "TaskAnalog", 10000, NULL, 1, NULL, 1);
}
void loop() {
// El loop no hace nada, las tareas se ejecutan en los núcleos
}