#include <Wire.h>
// Pinos do motor de passo
int stepPin1 = 0;
int stepPin2 = 4;
int stepPin3 = 5;
int stepPin4 = 16;
// Pino do potenciômetro
int potPin = 34;
// Variáveis para controle do motor
int motorPosition = 0; // Posição atual do motor
int lastPotValue = 0; // Último valor do potenciômetro
int stepsPerRevolution = 512; // Passos por rotação completa
void setup() {
// Configurar pinos do motor de passo como saída
pinMode(stepPin1, OUTPUT);
pinMode(stepPin2, OUTPUT);
pinMode(stepPin3, OUTPUT);
pinMode(stepPin4, OUTPUT);
// Inicializar a comunicação serial para depuração
Serial.begin(9600);
// Registrar o valor inicial do potenciômetro
lastPotValue = analogRead(potPin) / 10; // Reduz o intervalo para facilitar o controle
}
void stepMotor(int step) {
switch (step) {
case 0:
digitalWrite(stepPin1, HIGH);
digitalWrite(stepPin2, LOW);
digitalWrite(stepPin3, LOW);
digitalWrite(stepPin4, LOW);
break;
case 1:
digitalWrite(stepPin1, HIGH);
digitalWrite(stepPin2, HIGH);
digitalWrite(stepPin3, LOW);
digitalWrite(stepPin4, LOW);
break;
case 2:
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2, HIGH);
digitalWrite(stepPin3, LOW);
digitalWrite(stepPin4, LOW);
break;
case 3:
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2, HIGH);
digitalWrite(stepPin3, HIGH);
digitalWrite(stepPin4, LOW);
break;
case 4:
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2, LOW);
digitalWrite(stepPin3, HIGH);
digitalWrite(stepPin4, LOW);
break;
case 5:
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2, LOW);
digitalWrite(stepPin3, HIGH);
digitalWrite(stepPin4, HIGH);
break;
case 6:
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2, LOW);
digitalWrite(stepPin3, LOW);
digitalWrite(stepPin4, HIGH);
break;
case 7:
digitalWrite(stepPin1, HIGH);
digitalWrite(stepPin2, LOW);
digitalWrite(stepPin3, LOW);
digitalWrite(stepPin4, HIGH);
break;
}
}
void loop() {
// Ler o valor do potenciômetro
int potValue = analogRead(potPin) / 10; // Reduz o intervalo para facilitar o controle
Serial.print("Potenciômetro: ");
Serial.println(potValue);
// Calcular a diferença entre o valor atual e o último valor do potenciômetro
int delta = potValue - lastPotValue;
// Atualizar o último valor do potenciômetro
lastPotValue = potValue;
// Mover o motor com base no valor do potenciômetro
if (delta != 0) {
// Verificar a direção do movimento
if (potValue > 512) { // Se o valor for maior que 512, gira sentido horário
motorPosition++; // Incrementa a posição para sentido horário
} else { // Se o valor for menor ou igual a 512, gira sentido anti-horário
motorPosition--; // Decrementa a posição para sentido anti-horário
}
// Limitar a posição dentro de uma revolução
if (motorPosition >= stepsPerRevolution) {
motorPosition -= stepsPerRevolution;
} else if (motorPosition < 0) {
motorPosition += stepsPerRevolution;
}
// Acionar o motor para a nova posição
stepMotor(motorPosition % 8);
delay(2); // Ajustar a velocidade do motor
}
// Pequeno atraso para suavizar as leituras
delay(50);
}