#include <AccelStepper.h>
const int passosPorRevolucao = 200;
const int totalPosicoes = 10;
const int StepMotor = 4;
const int DirMotor = 15;
const int pinBotaoDefinir = 26;
const int pinBotaoMover = 14;
AccelStepper motor(AccelStepper::DRIVER, StepMotor, DirMotor);
int posicaoDesejada = 0;
bool definirPosicao = false;
void setup() {
Serial.begin(115200);
motor.setMaxSpeed(1000);
motor.setAcceleration(500);
pinMode(pinBotaoDefinir, INPUT_PULLUP);
pinMode(pinBotaoMover, INPUT_PULLUP);
}
void loop() {
if (digitalRead(pinBotaoDefinir) == LOW) {
definirPosicao = true;
while (digitalRead(pinBotaoDefinir) == LOW) {
delay(10);
}
if (posicaoDesejada <= totalPosicoes - 1) {
posicaoDesejada++;
Serial.print("Definir Posição: ");
Serial.println(posicaoDesejada);
} else {
posicaoDesejada = 0;
}
}
if (digitalRead(pinBotaoMover) == LOW && definirPosicao) {
definirPosicao = false;
moverParaPosicao(posicaoDesejada);
posicaoDesejada = 0;
}
int posicaoAtual = motor.currentPosition();
motor.run();
}
void moverParaPosicao(int posicaoDesejada) {
long destino = posicaoDesejada * (passosPorRevolucao / totalPosicoes);
motor.moveTo(destino);
while (motor.distanceToGo() != 0) {
motor.run();
}
definirPosicao = false; // Reiniciar o estado do botão `mover`
Serial.print("Motor movido para a posição: ");
Serial.println(posicaoDesejada);
}