//----------------------------------------------------------
// Variables Globales
int led_estado = 0;
int pote_valor = 0;
//----------------------------------------------------------
// Definición de constantes
#define PIN_LED 2 // GPIO 2 (digital) -> LED
#define PIN_POT 34 // GPIO 34 (analógico) -> POTENCIÓMETRO
#define SERIAL_SPEED 9600 // Velocidad del puerto serie
#define TAM_PILA 1024
#define PRIORIDAD 1
#define TIEMPO_TIMER 5000 // Cada 1 segundo (en microsegundos)
TimerHandle_t temporizador;
TaskHandle_t miTareaHandle;
//----------------------------------------------------------
// Handler del timer por HW
void tareaBlinkLed(void *parameter)
{
while(1){
ulTaskNotifyTake(pdTRUE, portMAX_DELAY); // Espera notificació
led_estado = !led_estado;
digitalWrite(PIN_LED, led_estado);
}
}
//Handler del temporizador
void callbackTemporizador(TimerHandle_t xTimer)
{
// Solo notifica a la tarea
xTaskNotifyGive(miTareaHandle);
}
//----------------------------------------------------------
// Setup
void setup()
{
// Inicia consola serie
Serial.begin(SERIAL_SPEED);
// Configura pin digital como salida -> LED
pinMode(PIN_LED, OUTPUT);
//Creo la tarea
xTaskCreate(tareaBlinkLed,"Tarea_Blink_led",TAM_PILA,NULL,PRIORIDAD,&miTareaHandle);
// Creo el temporizador
temporizador = xTimerCreate("Timer", pdMS_TO_TICKS(TIEMPO_TIMER), pdTRUE, NULL, callbackTemporizador);
xTimerStart(temporizador, 0);
}
//----------------------------------------------------------
// Loop
void loop()
{
// Lee constantemente el valor del potenciómetro
pote_valor = analogRead(PIN_POT);
// Solo a modo informativo, muestra el estado del LED
Serial.print("LED: ");
Serial.print(led_estado);
Serial.print(" ");
// Solo a modo informativo, muestra el valor del potenciómetro
Serial.print("POT: ");
Serial.println(pote_valor);
vTaskDelay(pdMS_TO_TICKS(100));
}