#include <ESP32Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD(0x27, 16, 2); // Dirección I2C, columnas y filas del LCD
Servo servo;
int pinServo = 12;
const byte pinPot = 4;
// Ajusta estos valores después de medirlos
int potMin = 300; // Valor mínimo del potenciómetro
int potMax = 3800; // Valor máximo del potenciómetro
void setup() {
Serial.begin(115200);
Serial.println("Práctica con el servomotor");
LCD.init(); // Inicializar LCD
LCD.backlight(); // Activar retroiluminación del LCD
servo.attach(pinServo, 500, 2500); // Configuración del rango del pulso PWM
pinMode(pinPot, INPUT); // Configurar el pin del potenciómetro como entrada
}
void loop() {
// Leer el valor del potenciómetro
int valorPot = analogRead(pinPot);
// Mapear el valor del potenciómetro al rango de 0 a 180 grados
int grados = map(valorPot, potMin, potMax, 0, 180);
// Asegurarse de que los grados estén en el rango válido
grados = constrain(grados, 0, 180);
// Mover el servomotor a la posición mapeada
servo.write(grados);
// Mostrar los grados en el LCD
LCD.setCursor(0, 0); // Colocar el cursor en la posición inicial del LCD
LCD.print("Grados: ");
LCD.print(grados); // Mostrar el valor de los grados
LCD.print(" "); // Limpiar caracteres residuales
// Enviar los datos al monitor serie
Serial.print("Potenciometro: ");
Serial.print(valorPot);
Serial.print(" -> Grados: ");
Serial.println(grados);
delay(100); // Pequeña pausa para evitar parpadeos rápidos en el LCD
}