#define STEP_PIN_1 2 #define DIR_PIN_1 4 #define STEP_PIN_2 0 #define DIR_PIN_2 1 #define POT_PIN 27 #define STEP_PIN_3 7 #define DIR_PIN_3 6 #define POT_PIN_2 28 #define NUM_READINGS 20 // Número de lecturas del potenciómetro para promediar #define POT_THRESHOLD 10 // Umbral para detectar el movimiento del potenciómetro int currentPosition1 = 0; // Variable para almacenar la posición actual del primer stepper int currentPosition2 = 0; // Variable para almacenar la posición actual del segundo stepper int lastPotValue = 0; // Último valor del potenciómetro leído void setup() { pinMode(STEP_PIN_1, OUTPUT); pinMode(DIR_PIN_1, OUTPUT); pinMode(STEP_PIN_2, OUTPUT); pinMode(DIR_PIN_2, OUTPUT); pinMode(STEP_PIN_3, OUTPUT); pinMode(DIR_PIN_3, OUTPUT); moveStepper1(currentPosition1); moveStepper2(currentPosition2); // El motor 3 empieza apagado, no se mueve en setup } void loop() { // Leer el valor del primer potenciómetro y calcular el promedio de varias lecturas int potValueTotal = 0; for (int i = 0; i < NUM_READINGS; i++) { potValueTotal += analogRead(POT_PIN); delay(1); // Pequeño retraso para estabilizar la lectura del ADC } int potValue1 = potValueTotal / NUM_READINGS; // Leer el valor del segundo potenciómetro int potValue2 = analogRead(POT_PIN_2); // Si el valor del potenciómetro ha cambiado significativamente, mover el motor 3 if (abs(potValue2 - lastPotValue) > POT_THRESHOLD) { int stepsToMove3 = abs(potValue2 - lastPotValue); // Mover el motor 3 en la dirección correspondiente digitalWrite(DIR_PIN_3, potValue2 > lastPotValue ? HIGH : LOW); moveStepper3(stepsToMove3); // Actualizar el último valor del potenciómetro leído lastPotValue = potValue2; } // Mapear el valor del primer potenciómetro al rango de pasos del stepper 1 int stepperSteps1 = map(potValue1, 0, 1023, 0, 100); // Suponiendo que el rango del potenciómetro es de 0 a 1023 // Mover ambos steppers al número de pasos calculado moveStepper1(stepperSteps1); moveStepper2(stepperSteps1); // Agregar un pequeño retraso para suavizar el movimiento delay(15); // Puedes ajustar este valor según la velocidad deseada del movimiento } void moveStepper1(int steps) { int stepsToMove = steps - currentPosition1; if (stepsToMove != 0) { digitalWrite(DIR_PIN_1, stepsToMove > 0 ? HIGH : LOW); stepsToMove = abs(stepsToMove); for (int i = 0; i < stepsToMove; i++) { digitalWrite(STEP_PIN_1, HIGH); delayMicroseconds(100); // Ajustar este valor según la velocidad deseada del movimiento digitalWrite(STEP_PIN_1, LOW); delayMicroseconds(100); // Ajustar este valor según la velocidad deseada del movimiento } currentPosition1 = steps; } } void moveStepper2(int steps) { int stepsToMove = steps - currentPosition2; if (stepsToMove != 0) { digitalWrite(DIR_PIN_2, stepsToMove > 0 ? LOW : HIGH); // Dirección opuesta al motor 1 stepsToMove = abs(stepsToMove); for (int i = 0; i < stepsToMove; i++) { digitalWrite(STEP_PIN_2, HIGH); delayMicroseconds(100); // Ajustar este valor según la velocidad deseada del movimiento digitalWrite(STEP_PIN_2, LOW); delayMicroseconds(100); // Ajustar este valor según la velocidad deseada del movimiento } currentPosition2 = steps; } } void moveStepper3(int steps) { for (int i = 0; i < steps; i++) { digitalWrite(STEP_PIN_3, HIGH); delayMicroseconds(3000); // Ajustar este valor según la velocidad deseada del movimiento digitalWrite(STEP_PIN_3, LOW); delayMicroseconds(3000); // Ajustar este valor según la velocidad deseada del movimiento } }