#include <LiquidCrystal_I2C.h>


const int potPin = 14;          // Pin del potenciómetro
const int servoPin = 4;        // Pin para el servo (PWM) de 16 bits
const int lcdAddress = 0x27;    // Dirección I2C del LCD
const int lcdColumns = 16;      // Número de columnas en tu LCD
const int lcdRows = 2;          // Número de filas en tu LCD
const int Canal = 0;            // Canal
const int frecuencia  = 50;     // Frecuencia PWM
const int resolucion  = 10;     // resolucion PWM
int servoPos; // Posición  del servo

LiquidCrystal_I2C lcd(lcdAddress, lcdColumns, lcdRows);

void setup() {    // acomodar, condicionar, bariables 
  lcd.init();   //prender lcd
  lcd.backlight();   // prender luz trasera de lcd 
  pinMode(servoPin, OUTPUT);  // pin desalida servo 
  ledcAttachPin(servoPin, Canal);   // guardar la informacion en el canal 
  ledcSetup(Canal, frecuencia, resolucion);  //se programa la lcd
  ledcWrite(0,12);   //
}

void loop() {
  int potValue = analogRead(potPin); // Lee el valor del potenciómetro
  servoPos = map(potValue, 0, 4095, 0, 180); // Mapea el valor del potenciómetro a la posición del servo

  // Controla el servo utilizando PWM
  int dutyCycle = map(servoPos, 0, 180, 25, 125); // Ajusta estos valores según las especificaciones de tu servo
  ledcWrite(Canal, dutyCycle);  // almacenamiento de datos   

  // Muestra la posición del servo en el LCD
  lcd.setCursor(0, 0);   // acomodar en la primer linia 
  lcd.print("Grado inclinado: ");   // texto
  lcd.setCursor(0, 1);  // acomodo abajo 
  lcd.println(servoPos); //escibe el grado de inclinacion
 

  delay(100); // Puedes ajustar este valor según tus necesidades
}