// Definir los pines de control para el motor y otros componentes
const int pinStep = 9; // Pin STEP para el driver A4988, controla el movimiento del motor paso a paso
const int pinDir = 8; // Pin DIR para el driver A4988, controla la dirección del motor
const int inicio = 7; // Pin de entrada para el botón de inicio
const int parar = 6; // Pin de entrada para el botón de parada
const int alarma = 13; // Pin de salida para el LED de alarma
const int potPin = A0; // Pin del potenciómetro para ajustar la velocidad
// Parámetros del motor paso a paso
int pasosPorRevolucion = 200; // Número de pasos necesarios para una revolución completa
int cont = 0; // Contador para llevar un registro del número de pasos
int velocidad; // Variable para almacenar la velocidad ajustada por el potenciómetro
void setup() {
// Configurar los pines como salida o entrada según corresponda
pinMode(pinStep, OUTPUT); // Configurar el pin STEP como salida (para enviar pulsos al driver del motor)
pinMode(pinDir, OUTPUT); // Configurar el pin DIR como salida (para controlar la dirección del motor)
pinMode(inicio, INPUT); // Configurar el pin de inicio como entrada (para leer el estado del botón de inicio)
pinMode(parar, INPUT); // Configurar el pin de parada como entrada (para leer el estado del botón de parada)
pinMode(alarma, OUTPUT); // Configurar el pin de alarma como salida (para controlar el LED de alarma)
Serial.begin(9600); // Inicializar la comunicación serial a 9600 baudios para depuración
}
void loop() {
cont = 0; // Reiniciar el contador de pasos a 0 al inicio de cada ciclo del loop
// Leer el valor del potenciómetro y ajustar la velocidad
int potValue = analogRead(potPin);
velocidad = map(potValue, 0, 1023, 2000, 100); // Mapear valor del potenciómetro a un rango de velocidad en microsegundos
// Esperar a que se presione el botón de inicio
while (digitalRead(inicio) == LOW) {
// No hacer nada hasta que el botón de inicio sea presionado
}
// Ejecutar el movimiento del motor mientras el botón de parada no esté presionado y el contador sea menor o igual a 150
while (cont <= 100) {
digitalWrite(pinDir, HIGH); // Establecer la dirección del motor en un sentido (por ejemplo, sentido horario)
digitalWrite(pinStep, HIGH); // Generar un pulso en el pin STEP para mover el motor
delayMicroseconds(velocidad); // Usar la velocidad ajustada por el potenciómetro
digitalWrite(pinStep, LOW); // Terminar el pulso
delayMicroseconds(velocidad); // Usar la misma velocidad entre pulsos
cont = cont + 1; // Incrementar el contador de pasos
}
while (digitalRead(parar) == LOW) {
digitalWrite(pinDir, HIGH); // Establecer la dirección del motor en el sentido original (por ejemplo, sentido horario)
digitalWrite(pinStep, HIGH); // Generar un pulso en el pin STEP para mover el motor
delayMicroseconds(velocidad); // Usar la velocidad ajustada por el potenciómetro
digitalWrite(pinStep, LOW); // Terminar el pulso
delayMicroseconds(velocidad); // Usar la misma velocidad entre pulsos
}
// Imprimir mensaje de éxito en la consola serial
Serial.println("successful home position");
}