#include <ESP32Servo.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET    -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Instanciamos nuestro servo
Servo myServo;

int pinServo = 2;     // Pin digital para el servo
int potPin = 25;      // Pin analógico para el potenciómetro

void setup() {
  // Inicializamos el servo en el pin correspondiente
  myServo.attach(18);

  // Configuramos el pin del potenciómetro como entrada
  pinMode(potPin, INPUT);
  pinMode(pinServo, OUTPUT);
  // Iniciamos comunicación serial para depuración
  Serial.begin(115200);
}

void loop() {
  // Leemos el valor del potenciómetro (0-4095 para ESP32)
  int potValue = analogRead(potPin);
  
  // Mapear el valor del potenciómetro (0-4095) al rango de ángulos del servo (0-180)
  int servoAngle = map(potValue, 0, 4095, 0, 180);
  
  // Movemos el servo al ángulo calculado
  myServo.write(servoAngle);
  
  // Imprimimos los valores para depuración
  Serial.print("Potentiometer Value: ");
  Serial.print(potValue);
  Serial.print(" | Servo Angle: ");
  Serial.println(servoAngle);
  
  // Esperamos un corto período antes de la próxima lectura
  delay(15);
}