#define LED 2
#define BT 5
#define ADC_PIN 34
#define TEMPO_BTN 50
SemaphoreHandle_t semaforo;
TaskHandle_t vTaskTrataBTHandle;
TaskHandle_t vTaskADCHandle;
TaskHandle_t vTaskLEDHandle;
unsigned int ultima_intrr = 0;
void vTaskTrataBT(void * pvParameters){
int contador = 0;
while(1){
xSemaphoreTake(semaforo,portMAX_DELAY);
Serial.println("x: " + String(contador++));
}
}
void vTaskLED(void *pvParameters) {
for (;;) {
digitalWrite(LED,HIGH);
vTaskDelay(pdMS_TO_TICKS(100));
digitalWrite(LED,LOW);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void vTaskADC(void * pvParameters){
int adcValue;
while(1){
xSemaphoreTake(semaforo,portMAX_DELAY);
adcValue = analogRead(34);
Serial.println("Valor do ADC: " + String(adcValue));
Serial.println(" ");
}
}
void ISR_CallBack(){
unsigned int intrr_atual = millis();
if (intrr_atual - ultima_intrr > TEMPO_BTN) {
BaseType_t xHighPriorityTaskWoken = pdTRUE;
xSemaphoreGiveFromISR(semaforo,&xHighPriorityTaskWoken);
if(xHighPriorityTaskWoken == pdTRUE)
{
portYIELD_FROM_ISR();
}
}
ultima_intrr = intrr_atual;
}
void setup() {
Serial.begin(9600);
pinMode(LED,OUTPUT);
pinMode(BT,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BT),ISR_CallBack,FALLING);
semaforo = xSemaphoreCreateBinary();
xTaskCreate(vTaskTrataBT, "Task BT",configMINIMAL_STACK_SIZE + 1024,NULL,3,&vTaskTrataBTHandle);
xTaskCreate(vTaskADC,"Task ADC",configMINIMAL_STACK_SIZE + 1024, NULL,1,&vTaskADCHandle);
xTaskCreate(vTaskLED,"Task LED",configMINIMAL_STACK_SIZE + 1024, NULL,10,&vTaskLEDHandle);
}
void loop() {
}