#include <ESP32Servo.h>
#include "freertos/FreeRTOS.h"
//#include "driver/gpio.h"

#define LED_PIN 2
#define SERVOPIN 23
#define BUTTON 22

Servo servo;

TaskHandle_t tarefa1Handle = NULL;

uint8_t led_value=0;
uint8_t pos=0;
bool press=0;



void tarefa1(void *pvParameter){
  while(1){
    pos++;
    if(pos>180) pos=0;
    servo.write(pos);
    vTaskDelay(100/portTICK_PERIOD_MS);
  }
}

void tarefa2(void *pvParameter){
  while(1){
    digitalWrite(LED_PIN, led_value);
    led_value=!led_value;
    vTaskDelay(3000/portTICK_PERIOD_MS);
  }
}

void tarefa3(void *pvParameter){
  while(1){
    if(digitalRead(BUTTON)==LOW){
      press=1;
      vTaskSuspend(tarefa1Handle);
    }else if(digitalRead(BUTTON)==HIGH && press==1){
      press=0;
      vTaskResume(tarefa1Handle);
    } 
    vTaskDelay(100/portTICK_PERIOD_MS);  
  }
}


void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  servo.attach(SERVOPIN, 500, 2400);

  xTaskCreate(&tarefa1, "tarefa1", 1024, NULL, 5, &tarefa1Handle);
  xTaskCreate(&tarefa2, "tarefa2", 1024, NULL, 5, NULL);
  xTaskCreate(&tarefa3, "tarefa3", 1024, NULL, 5, NULL);
}


void loop() {}