/*
Servo and LCD 16x2 using Franzininho, Slide potentiometer and LCD 16x2 i2c
by Anderson Costa with ❤ for the Wokwi community
Visit https://wokwi.com to learn about the Wokwi Simulator
Visit https://franzininho.com.br to learn about the Franzininho
*/
#include "LiquidCrystal_I2C.h"
#include "Servo8Bit.h"
#define SERVO_PIN PB1 // Define o pino onde o servo está conectado
#define SLIDE_PIN PB3 // Define o pino onde o potenciômetro está conectado
int main()
{
Servo8Bit myServo; // Cria um objeto servo
myServo.attach(SERVO_PIN); // Conecta o servo ao pino PB1
LiquidCrystal_I2C lcd(0x27, 16, 2); // Define endereço e 16 caracteres/2 linhas
lcd.init(); // Inicializa o display
lcd.backlight(); // Acende a luz de fundo do display
lcd.clear(); // Limpa o display
lcd.setCursor(0, 0); // Coloca o cursor na primeira linha
lcd.print("ANGULO DO SERVO:"); // Imprime a mensagem no display
lcd.setCursor(0, 1); // Coloca o cursor na segunda linha
lcd.print("ADC:"); // Imprime a mensagem no display
// Faz a leitura do potenciometro, imprime no display e controla o servo
while (1) {
// Obtém o resultado do potenciômetro, ADC de 10 bits (0-1023)
int pot = analogRead(SLIDE_PIN);
// Coloca na posição do valor do ADC no display
lcd.setCursor(5, 1);
lcd.print(pot);
lcd.print(" "); // Limpa o valor anterior que ficou na frente
// Converte para um valor entre 0 e 180 para ficar longe de overflows adjacentes
int pos = map(pot, 0, 1023, 0, 180);
// Coloca na posição do valor do ângulo do servo no display
lcd.setCursor(12, 1);
lcd.print(pos);
lcd.print((char)223);
lcd.print(" "); // Limpa o valor anterior que ficou na frente
myServo.write(pos); // Define o servo para ir para a posição na variável 'pos'
myServo.delay(15); // Espera 15ms para o servo alcançar a posição
}
}