El ciclo se reinicia

#include <AccelStepper.h>

// Definir el tipo de motor y los pines para el primer motor (corte)
#define motorInterfaceType 1
#define dirPin1 9
#define stepPin1 10

// Definir los pines para el segundo motor (rotativo)
#define dirPin2 5
#define stepPin2 6

// Definir el pin del spindle (relé o transistor)
#define spindlePin 7

// Definir el pin del botón de reset
#define resetButtonPin 8

// Crear instancias de AccelStepper para ambos motores
AccelStepper stepper1(motorInterfaceType, stepPin1, dirPin1);
AccelStepper stepper2(motorInterfaceType, stepPin2, dirPin2);

bool cycleCompleted = false; // Variable para controlar si el ciclo ha terminado para el segundo motor
bool resetState = false;     // Variable para controlar si el sistema debe detenerse

void setup() {
  // Configurar pines
  pinMode(spindlePin, OUTPUT); // Configurar el pin del spindle como salida
  pinMode(resetButtonPin, INPUT_PULLUP); // Configurar el botón de reset como entrada con resistencia pull-up

  // Apagar el spindle al inicio
  digitalWrite(spindlePin, LOW);

  // Configurar velocidad y aceleración para el primer motor
  stepper1.setMaxSpeed(90);    // Velocidad lenta en pasos por segundo
  stepper1.setAcceleration(30); // Aceleración lenta en pasos por segundo^2

  // Configurar velocidad constante para el segundo motor
  stepper2.setMaxSpeed(400);    // Velocidad máxima constante en pasos por segundo
  stepper2.setSpeed(400);       // Configurar la velocidad constante

  // Mover el primer motor a la posición inicial de corte (28 revoluciones)
  stepper1.moveTo(800 * 28); // 800 pasos por revolución, 28 revoluciones
}

void loop() {
  // Comprobar si el botón de reinicio ha sido presionado
  if (digitalRead(resetButtonPin) == LOW) { // Si el botón está presionado
    resetState = true; // Activar el estado de reset
    stopAll(); // Detener todos los motores y el spindle
    delay(500); // Retardo para evitar rebotes del botón
  }

  if (!resetState) {
    // Verificar si el primer motor ha llegado a la posición objetivo
    if (stepper1.distanceToGo() == 0) {
      // Cambiar la velocidad y dirección para el primer motor
      if (stepper1.currentPosition() == 800 * 28) {
        // Si está en la posición de corte, ajustar para regreso rápido
        stepper1.setMaxSpeed(400);    // Velocidad rápida en pasos por segundo
        stepper1.setAcceleration(50); // Aceleración rápida en pasos por segundo^2
        stepper1.moveTo(0);           // Regresar al origen
      } else {
        // Si está en el origen, ajustar para corte lento
        stepper1.setMaxSpeed(90);    // Velocidad lenta para corte
        stepper1.setAcceleration(30); // Aceleración lenta para corte
        stepper1.moveTo(800 * 28);   // Mover a la posición de corte
      }
    }

    // Ejecutar el movimiento del primer motor
    stepper1.run();

    // Ejecutar el segundo motor a velocidad constante
    stepper2.runSpeed();
  }
}

// Función para detener todos los motores y el spindle
void stopAll() {
  stepper1.stop();  // Detener el primer motor
  stepper2.stop();  // Detener el segundo motor
  digitalWrite(spindlePin, LOW); // Apagar el spindle
}

hola, los motores nema23 deben detenerse cuando el ciclo del motor 1 temina el ciclo de corte y regreso a su origen pero no lo hace el ciclo se inicia nuevamente a un no tengo instalado el boton de reinicio ni el rele para apagar el splindle no se si sea por eso que no se detiene

#include <AccelStepper.h>

// Definir el tipo de motor y los pines para el primer motor (corte)
#define motorInterfaceType 1
#define dirPin1 9
#define stepPin1 10

// Definir los pines para el segundo motor (rotativo)
#define dirPin2 5
#define stepPin2 6

// Crear instancias de AccelStepper para ambos motores
AccelStepper stepper1(motorInterfaceType, stepPin1, dirPin1);
AccelStepper stepper2(motorInterfaceType, stepPin2, dirPin2);

bool cycleCompleted = false; // Variable para controlar si el ciclo ha terminado

void setup() {
  // Configurar velocidad y aceleración para el primer motor
  stepper1.setMaxSpeed(90);    // Velocidad lenta en pasos por segundo
  stepper1.setAcceleration(30); // Aceleración lenta en pasos por segundo^2

  // Configurar velocidad constante para el segundo motor
  stepper2.setMaxSpeed(400);    // Velocidad máxima constante en pasos por segundo
  stepper2.setSpeed(400);       // Configurar la velocidad constante

  // Mover el primer motor a la posición inicial de corte (28 revoluciones)
  stepper1.moveTo(800 * 28); // 800 pasos por revolución, 28 revoluciones
}

void loop() {
  // Verificar si el primer motor ha llegado a la posición objetivo
  if (stepper1.distanceToGo() == 0 && !cycleCompleted) {
    // Cambiar la velocidad y dirección para el primer motor
    if (stepper1.currentPosition() == 800 * 28) {
      // Si está en la posición de corte, ajustar para regreso rápido
      stepper1.setMaxSpeed(400);    // Velocidad rápida 
      stepper1.setAcceleration(50); // Aceleración rápida 
      stepper1.moveTo(0);           // Regresar al origen
    } else {
      // Si está en el origen, el ciclo ha terminado
      cycleCompleted = true;       
      stepper1.stop();             
      stepper2.stop();             
      stepper2.disableOutputs();   
    }
  }

  // Ejecutar el movimiento del motor 1
  stepper1.run();

  
  if (!cycleCompleted) {
    stepper2.runSpeed();
  }
}

Saludos, parece que solo tenia en el lugar incorrecto los stop y de momento elimine botón y relé lo are manual de momento si alguien por el foro sabe como reparara lo el botón y el relé se lo agradecería Bonito día

¿A vos te parece?
Yo veo dos códigos muy diferentes aunque ninguno de los dos hace lo que se supone debería.
Plantéale mejor el problema a la IA.

Saludos

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.