#include <Arduino.h>
#include <AccelStepper.h>
#include <LiquidCrystal_I2C.h>
// Define os pinos
#define STEP_PIN 33
#define DIR_PIN 32
#define ENABLE_PIN 25
#define POT_PIN 12
#define LED_VERMELHO 4
#define LED_VERDE 16
// Cria um objeto AccelStepper
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
// Cria um objeto para o LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variáveis para controlar a posição e o status
float currentAngle = 0.0; // Posição atual em graus
const float stepsPerRevolution = 200.0;
void setup() {
// Configura os pinos
pinMode(ENABLE_PIN, OUTPUT);
pinMode(LED_VERMELHO, OUTPUT);
pinMode(LED_VERDE, OUTPUT);
digitalWrite(ENABLE_PIN, LOW); // Habilita o motor
digitalWrite(LED_VERDE, HIGH); // Indica funcionamento normal
// Inicializa a biblioteca AccelStepper
stepper.setMaxSpeed(2000);
stepper.setSpeed(2000);
stepper.setAcceleration(1000);
// Inicializa o LCD
lcd.init();
lcd.backlight();
}
void loop() {
// Lê o valor do potenciômetro
int potValue = analogRead(POT_PIN);
// Mapeia o valor do potenciômetro para um ângulo entre -180 e 180 graus
float angle = map(potValue, 0, 4095, -180, 180);
// Calcula o número de passos correspondente ao ângulo
int steps = round(angle * stepsPerRevolution / 360.0);
if(currentAngle != angle){
// Exibe a posição no LCD
// Atualiza a posição atual em graus
currentAngle = angle;
lcd.setCursor(0, 0);
lcd.print("Angulo: ");
lcd.print(currentAngle);
lcd.print(" ");
}
// Move o motor para a nova posição
stepper.moveTo(steps);
stepper.runToPosition();
delay(10);
}