#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define SDA 25
#define SCL 26
#define SERVO_PIN 21
#define SERVO_CHN 0
#define SERVO_FRQ 50
#define SERVO_BIT 12
#define ADC_PIN 14
LiquidCrystal_I2C lcd(0x27,16,2);
void servo_set_pin(int pin);
void servo_set_angle(int angle);
int POSICAO = 0;
void setup() {
Wire.begin(SDA, SCL);
lcd.init();
lcd.backlight();
servo_set_pin(SERVO_PIN);
Serial.begin(115200);
}
void loop() {
int potVal = analogRead(ADC_PIN);
Serial.printf("Valor do Potênciometro: %d\t", potVal);
int angleVal = map(potVal, 0, 4095, 0, 180);
Serial.printf("Angulo: %d\r\n", angleVal);
servo_set_angle(angleVal);
lcd.setCursor(0,0);
lcd.print("SERVO MOTOR");
lcd.setCursor(0,1);
lcd.print("Angulo: ");
lcd.setCursor(9,1);
lcd.print(angleVal);
if (angleVal != POSICAO){
lcd.clear();
POSICAO = angleVal;
}
delay(15);
}
void servo_set_pin(int pin) {
ledcSetup(SERVO_CHN, SERVO_FRQ, SERVO_BIT);
ledcAttachPin(pin, SERVO_CHN);
}
void servo_set_angle(int angle) {
if (angle > 180 || angle < 0)
return;
long pwm_value = map(angle, 0, 180, 103, 512);
ledcWrite(SERVO_CHN, pwm_value);
}