#include <ESP32Servo.h>

Servo forkServo;

int angle = 90;
int control_mode = 0;

void setup()
{
  ESP32PWM::allocateTimer(0);
  ESP32PWM::allocateTimer(1);
  ESP32PWM::allocateTimer(2);
  ESP32PWM::allocateTimer(3);

  forkServo.setPeriodHertz(50);
  forkServo.attach(D10);
  forkServo.write(angle);
}

void loop()
{
  if (control_mode == 0) {
    if (angle < 135) {
      angle++;
      forkServo.write(angle);
      delay(50);
    } else {
      control_mode = 1;
    }
  }

  else if (control_mode == 1) {
    if (angle > 45) {
      angle--;
      forkServo.write(angle);
      delay(50);
    } else {
      control_mode = 2;
    }
  }

  else if (control_mode == 2) {
    if (angle < 135) {
      angle++;
      forkServo.write(angle);
      delay(50);
    } else {
      control_mode = 3;
    }
  }

  else if (control_mode == 3) {
    if (angle > 45) {
      angle--;
      forkServo.write(angle);
      delay(50);
    } else {
      control_mode = 4;
    }
  }

  else if (control_mode == 4) {
    if (angle < 90) {
      angle++;
      forkServo.write(angle);
      delay(50);
    } else {
      control_mode = 0;
    }
  }
}
