// Programa: Controlando um servo motor com potenciômetro
#include <Servo.h> // Inclui a biblioteca Servo para controlar servos
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Servo
Servo meuServo; // Cria um objeto Servo para controlar o servo motor
int pos; // Variável para armazenar a posição do servo motor
int potPin = A0; // Pino analógico onde o potenciômetro está conectado
int val; // Variável para armazenar o valor lido do potenciômetro
// Display
#define endereco 0x27 // Endereços comuns: 0x27, 0x3F
#define colunas 16
#define linhas 2
// INSTANCIANDO OBJETOS
LiquidCrystal_I2C lcd(endereco, colunas, linhas);
void setup() {
meuServo.attach(6); // Associa o servo motor ao pino digital 6 do Arduino
meuServo.write(0); // Define a posição inicial do servo motor para 0 graus
Serial.begin(9600);
lcd.init(); // INICIA A COMUNICAÇÃO COM O DISPLAY
lcd.backlight(); // LIGA A ILUMINAÇÃO DO DISPLAY
lcd.clear(); // LIMPA O DISPLAY
}
void loop() {
val = analogRead(potPin); // Lê o valor do potenciômetro (0 a 1023)
val = constrain(val, 0, 1023); // Garante que o valor fique entre 0 e 1023
pos = map(val, 0, 1023, 0, 180); // Mapeia o valor do potenciômetro para a faixa de 0 a 180 graus
meuServo.write(pos); // Define a posição do servo motor
Serial.print("Pot: ");
Serial.println(val);
char linha1[17]; // 16 caracteres + terminador '\0'
sprintf(linha1, "Potenc.: %-10d", val); // Alinha o valor à esquerda e preenche com espaços
char linha2[17]; // 16 caracteres + terminador '\0'
sprintf(linha2, "Pos. Servo: %-10d", pos); // Alinha o valor à esquerda e preenche com espaços
lcd.setCursor(0, 0); // Define o cursor na primeira linha
lcd.print(linha1); // Exibe o texto formatado
lcd.setCursor(0, 1); // Define o cursor na segunda linha
lcd.print(linha2); // Exibe o texto formatado
/*
lcd.print("Pot: ");
lcd.setCursor(5, 0);
lcd.print(val);
lcd.setCursor(0, 1); // POSICIONA O CURSOR NA PRIMEIRA COLUNA DA LINHA 2
lcd.print("Pos: ");
lcd.setCursor(5, 1);
lcd.print(pos);
//lcd.setCursor(5, 0);
//lcd.print(" ");
lcd.setCursor(5, 1);
lcd.print(" ");
//lcd.clear();
*/
delay(15); // Aguarda um curto intervalo para estabilizar o movimento do servo
}