#include <ESP32Servo.h>
#include <LiquidCrystal.h>

// Configuración de la pantalla LCD
LiquidCrystal lcd(22,23,5,18,19,21); 
/*
RS: Pin de selección del registro. Conéctalo al pin 22 del ESP32.
E: Pin de habilitación. Conéctalo al pin 23 del ESP32.
D4: Pin de datos 4. Conéctalo al pin 5 del ESP32.
D5: Pin de datos 5. Conéctalo al pin 18 del ESP32.
D6: Pin de datos 6. Conéctalo al pin 19 del ESP32.
D7: Pin de datos 7. Conéctalo al pin 21 del ESP32.
*/
Servo miServo;

#define servoPin 12     //Pin al que conectamos el cable naranja del servo.
#define potPin 14        //Pin al que conectamos la patilla central del potenciómetro.
#define btn 27
#define led 2


int I;

void setup() {
   lcd.begin(16, 2);
  miServo.attach(servoPin);

  Serial.begin(115200);
//
  pinMode(potPin,INPUT);
  pinMode(btn,INPUT);
  pinMode(led,OUTPUT);

  
}

void loop() {  
    
    if (digitalRead(btn) == HIGH) {
      lcd.setCursor(0, 0);
  //Escribimos la palabra Programador
  lcd.print("  EJECUTANDO  ");
    lcd.setCursor(0, 1);
  //Escribimos la palabra Programador
  lcd.print("  SECUENCIA  ");
     digitalWrite(led, HIGH);
      miServo.write(0);
      delay(3000);  
      miServo.write(90);
      delay(1000);  
      miServo.write(180);
      delay(1000);  
      miServo.write(0);
      delay(1000);  
      miServo.write(30);
      delay(1000);  
      miServo.write(60);
      delay(1000);  
      miServo.write(90);
      delay(1000);    
      miServo.write(120);
      delay(1000);  
      miServo.write(150);
      delay(1000);  
      miServo.write(180);
      delay(1000);  
    }

    else {   
  digitalWrite(led, LOW);  
  int valorPot = analogRead(potPin);                  //Lectura del conversor A/D en bits.
  int valorServo = map(valorPot, 0, 4095, 0, 180);    //Mapeado de valores:  [0..4095 ]  ->  [0..180]
  float vpot = map(valorPot, 0, 4095, 0, 5); 
  miServo.write(valorServo);
  Serial.print(valorServo);
  Serial.print(",");
  Serial.println(valorPot);
  lcd.setCursor(0, 0);
  lcd.print("voltaje : ");
  lcd.print(vpot);
  lcd.print(" v");
    lcd.setCursor(0, 0);
  //Escribimos la palabra Programador
  lcd.setCursor(0, 1);
  lcd.print("GRADOS : ");
  lcd.print(valorServo);
    }
 
}