#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
const int botao = 4; // Pino do botão
const int servoPin = 18; // Pino do servo motor
Servo myServo; // Objeto para controlar o servo motor
int servoPosiçao = 0; // Posição atual do servo
bool statusbotao = false; // Estado atual do botão
bool ultimoestadobotao = false; // Último estado do botão
// Configuração do LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Endereço I2C do LCD, tamanho 16x2
void setup() {
pinMode(botao, INPUT_PULLUP); // Configura o botão como entrada com pull-up interno
myServo.attach(servoPin); // Conecta o servo ao pino definido
myServo.write(servoPosiçao); // Define a posição inicial do servo
Serial.begin(115200); // Inicia a comunicação serial para debug
// Inicializando LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Servo Pos:");
lcd.setCursor(0, 1);
lcd.print(servoPosiçao);
}
void loop() {
// Lê o estado do botão
statusbotao = !digitalRead(botao); // Inverte para considerar pull-up
// Detecta mudança de estado (pressionado)
if (statusbotao && !ultimoestadobotao) {
servoPosiçao += 10; // Incrementa a posição do servo em 10 graus
if (servoPosiçao > 180) {
servoPosiçao = 180;// Limita a posição máxima em 180 graus
}
myServo.write(servoPosiçao); // Move o servo para a nova posição
Serial.println(servoPosiçao);// Imprime a posição para monitoramento
// Atualiza o LCD
lcd.setCursor(0, 1);
lcd.print(" "); // Limpa a linha
lcd.setCursor(0, 1);
lcd.print(servoPosiçao);
}
// Atualiza o estado do botão
ultimoestadobotao = statusbotao;
delay(50);
}