Dear community, could you please help me with the error that I have in the programming code for the schedule.
I have two motors that must do a continuous routine for 3 hours and then they must rest for 30 minutes.
For now I am testing for shorter periods, but the problem is that it only executes a routine and the motors do nothing until the rest command arrives.
I attach the code that I have written.
Thanks!
#include "AccelStepper.h"
#include <Wire.h>
#include <RTClib.h>
// AccelStepper configuracion
AccelStepper stepperY(AccelStepper::FULL4WIRE, 4, 5, 6,7);
AccelStepper stepperX(AccelStepper::FULL4WIRE, 8, 9, 10, 11);
// Define pins a usar para switches home
#define home_switchY 3 // Pin 3 conectado to Home Switch (MicroSwitch) Y
#define home_switchX 2 // Pin 2 conectado to Home Switch (MicroSwitch) X
int rele = 12; // Define pin a usar para rele
RTC_DS3231 RTC; //declara parametro para reloj
bool inicio = true;
bool fin = true;
// Variables de viaje paso a paso
long initial_homingY=-1; //Se utiliza para Home paso a paso en el arranque
long initial_homingX=-1; //Se utiliza para Home paso a paso en el arranque
void setup() {
Serial.begin(9600); // inicia Serial monitor con velocidad de 9600 Baudios
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicaci¢n con el RTC
//RTC.adjust (DateTime (__DATE__, __TIME__ ));
Serial.begin (9600);
pinMode (rele, OUTPUT);
pinMode(home_switchY, INPUT_PULLUP);
pinMode(home_switchX, INPUT_PULLUP);
pinMode (rele, OUTPUT); // Configurar rele como salida o OUTPUT
delay(5); // Espera para despertar Driver
// Establecemos la velocidad máxima y la aceleración de cada Steppers en el inicio para el home
stepperX.setMaxSpeed(100.0);
stepperX.setAcceleration(100.0);
stepperY.setMaxSpeed(100.0);
stepperY.setAcceleration(100.0);
// Establecemos posicion home
homeX ();
homeY ();
// Establecemos posicion neutral
Serial.println("Estableciendo posicion neutral . . .");
stepperX.runToNewPosition(1200);
stepperY.runToNewPosition(700);
Serial.println("Posicion neutral OK. . .");
}
void loop() {
// if (initial_homingX > 0) {
// digitalWrite (rele, HIGH);
// }
// else {
// digitalWrite (rele, LOW);
// }
DateTime fecha = RTC.now () ;
// Serial.println("Inicia rutina 1 . . .");
if ( fecha.hour () == 18 && fecha.minute () == 21 ){
if (inicio == true ) {
Serial.println ("Inicia rutina 1");
digitalWrite (rele, HIGH);
rutina1 ();
inicio = false; //desactiva alarma
}
}
if ( fecha.hour () == 18 && fecha.minute () == 24 ){
if (fin == true ) {
digitalWrite (rele, LOW);
apagado ();
Serial.println ("Rutina 1 terminada");
fin = false; //desactiva alarma
}
}
delay (1000);
if ( fecha.hour () == 18 && fecha.minute() == 25 ) {
inicio = true; //reactiva alarma
fin = true; //reactiva alarma
}
}
///////////// FUNCIONES by CMR ////////////
//FUNCION HOME MOTOR X
void homeX() {
Serial.print("Posicionando Motor X al Home . . . . . . . . . . . ");
while (digitalRead(home_switchX)) { // Haz que el Stepper se mueva hacia la izquierda hasta que se active el interruptor
stepperX.moveTo(initial_homingX); // Establecer la posición para moverse
initial_homingX--; // Disminuye en 1 para el siguiente movimiento si es necesario
stepperX.run(); //Comienza a mover el paso a paso
delay(5);
}
stepperX.setCurrentPosition(0); // Establecer la posición actual como cero por ahora
stepperX.setMaxSpeed(100.0); // Establecer la velocidad máxima de pasos (más lento para obtener una mejor precisión)
stepperX.setAcceleration(100.0); // Establecer aceleración de paso a paso
initial_homingX=1;
while (!digitalRead(home_switchX)) { // Haz que el Stepper se mueva hacia la derecha hasta que el interruptor esté desactivado
stepperX.moveTo(initial_homingX);
stepperX.run();
initial_homingX++;
delay(5);
}
stepperX.setCurrentPosition(0);
Serial.println("Homing Motor X Completado");
Serial.println("");
stepperX.setMaxSpeed(200.0); // Establecer la velocidad máxima de Stepper (más rápido para movimientos regulares)
stepperX.setAcceleration(200.0); // Establecer la aceleración de Stepper
}
//FUNCION HOME MOTOR Y
void homeY () {
Serial.print("Posicionando Motor Y al Home . . . . . . . . . . . ");
while (digitalRead(home_switchY)) { // Haz que el Stepper se mueva hacia la izquierda hasta que se active el interruptor
stepperY.moveTo(initial_homingY); // Establecer la posición para moverse
initial_homingY--; // Disminuye en 1 para el siguiente movimiento si es necesario
stepperY.run(); //Comienza a mover el paso a paso
delay(5);
}
stepperY.setCurrentPosition(0); // Establecer la posición actual como cero por ahora
stepperY.setMaxSpeed(100.0); // Establecer la velocidad máxima de pasos (más lento para obtener una mejor precisión)
stepperY.setAcceleration(100.0); // Establecer aceleración de paso a paso
initial_homingY=1;
while (!digitalRead(home_switchY)) { // Haz que el Stepper se mueva hacia la derecha hasta que el interruptor esté desactivado
stepperY.moveTo(initial_homingY);
stepperY.run();
initial_homingY++;
delay(5);
}
stepperY.setCurrentPosition(0);
Serial.println("Homing Motor Y Completado");
Serial.println("");
stepperY.setMaxSpeed(200.0); // Establecer la velocidad máxima de Stepper (más rápido para movimientos regulares)
stepperY.setAcceleration(200.0); // Establecer la aceleración de Stepper
}
// FUNCION RUTINA A
void rutina1 () {
stepperX.runToNewPosition(1500);
stepperY.runToNewPosition(800);
delay(500);
stepperX.runToNewPosition(800);
stepperY.runToNewPosition(1000);
delay(500);
stepperX.runToNewPosition(1500);
stepperY.runToNewPosition(1200);
delay(500);
stepperX.runToNewPosition(800);
stepperY.runToNewPosition(1400);
delay(500);
stepperX.runToNewPosition(1500);
stepperY.runToNewPosition(1600);
delay(500);
stepperX.runToNewPosition(800);
stepperY.runToNewPosition(1800);
delay(500);
}
void apagado (){
digitalWrite (4, LOW);
digitalWrite (5, LOW);
digitalWrite (6, LOW);
digitalWrite (7, LOW);
digitalWrite (8, LOW);
digitalWrite (9, LOW);
digitalWrite (10, LOW);
digitalWrite (11, LOW);
Serial.print ("Motores a reposo");
}
[code/]