No se mueve el motor tras juntar codigo

Buenos días;

El caso es que estoy haciendo un programa con arduino y este tiene dos parte, la primera controla un motor paso a paso con un DRV8825 y la segunda es un contador de revoluciones.

EL problema es que probando los códigos por separado el motor se mueve y el sensor envía al monitor serie las revoluciones medidas. Pero cuando junto los dos códigos para que haga las dos funciones a la vez el motor se deja de mover.

Les adjunto el código:

// Include the AccelStepper library:
#include <AccelStepper.h>

//Configuración del motor
// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:
#define dirPin 8
#define stepPin 9
#define motorInterfaceType 1
// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);


//Configuración cuentarevoluciones
volatile int contador = 0;   // Variable entera que se almacena en la RAM del Micro
int RPMh = 0;
int Lh = 0;
int RPMt = 0;


void setup() {
   Serial.begin(9600);
  // setup motor Set the maximum speed in steps per second:
  stepper.setMaxSpeed(204800); //Set the maximum speed in steps per second

  //setup contador
  attachInterrupt(0,interrupcion0,RISING);  // Interrupcion 0 (pin2) // LOW, CHANGE, RISING, FALLING
}
void loop() {
  //loop motor
  stepper.setSpeed(6400);// Set the speed in steps per second:
  stepper.runSpeed();// Step the motor with a constant speed as set by setSpeed():
  
  //loop contador
  delay(999);// retardo de casi 1 segundo
  RPMh=contador*1.154;
  Serial.print(RPMh); 
  Serial.println(" RPM");    
  contador = 0;
  Lh=((RPMh*360)/180)*PI*24.5;
  RPMt=((Lh/(PI*12.5))*180)/360;
  Serial.print(RPMt); 
  Serial.println(" RPM");

}


void interrupcion0()    // Funcion que se ejecuta durante cada interrupion
{
  contador++;           // Se incrementa en uno el contador
}

A ver si alguien puede dar con el problema.

De antemano muchisimas gracias

El problema es el de casi siempre,delay().Si pones un delay de 1 segundo,tu arduino no hara nada durante ese segundo,tan solo atender a la interrupcion,pero para mover el motor necesitas que la funcion runSpeed() sea llamada con la maxima frecuencia posible.Repasa la funcion millis() hay mucha informacion en documentacion

muchisimas gracias jose. Lo miraré y volveré a postear, espero que con la solución.

De todas maneras tratandose de un motor a pasos siempre puedes calcular las rpm sabiendo los pasos por vuelta del motor y la velocidad que hayas puesto en pasos por segundo

Sí, pero el objetivo no es ese, más bien el contrario.
Quiero que el cuenta revoluciones mida la velocidad de giro de un objeto y el motor reproduzca esta velocidad.
Aún no he implementado esa parte, pero quería ver si funcionaban las conexiones.

Al final usé un millis() con un if y ya me hace lo que pretendía con el código de prueba:

// Include the AccelStepper library:
#include <AccelStepper.h>

//Configuración del motor
// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:
#define dirPin 8
#define stepPin 9
#define motorInterfaceType 1
// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);


//Configuración cuentarevoluciones
volatile int contador = 0;   // Variable entera que se almacena en la RAM del Micro
int RPMh = 0;
int Lh = 0;
int RPMt = 0;
int periodo = 999;
unsigned long tiempo1 = 0;
unsigned long tiempo2 = 0;
unsigned long TiempoAhora = 0;

void setup() {
   Serial.begin(9600);
  // setup motor Set the maximum speed in steps per second:
  stepper.setMaxSpeed(204800); //Set the maximum speed in steps per second

  //setup contador
  attachInterrupt(0,interrupcion0,RISING);  // Interrupcion 0 (pin2) // LOW, CHANGE, RISING, FALLING
  tiempo1 = millis();
  
}
void loop() {
  //loop motor
  stepper.setSpeed(6400);// Set the speed in steps per second:
  stepper.runSpeed();// Step the motor with a constant speed as set by setSpeed():
  
  //loop contador
  tiempo2 = millis();
  if(tiempo2 > (tiempo1+periodo)){  //Si ha pasado 1 segundo ejecuta el IF
    tiempo1 = millis(); //Actualiza el tiempo actual
    RPMh=contador*1.154;// Como son dos interrupciones por vuelta (contador * (60/2))
    Serial.print(RPMh); 
    Serial.println(" RPM");    //  El numero 2 depende del numero aspas de la helise del motor en prueba
    contador = 0;
    Lh=((RPMh*360)/180)*PI*24.5;
    RPMt=((Lh/(PI*12.5))*180)/360;
    Serial.print(RPMt); 
    Serial.println(" RPM");
    }

  
}


void interrupcion0()    // Funcion que se ejecuta durante cada interrupion
{
  contador++;           // Se incrementa en uno el contador
}

Este código le marca una velocidad al motor y utilizo el sensor para confirmar esa velocidad, el siguiente paso será darle la vuelta para que el motor se mueva a la velocidad que mida el sensor, ya les iré contando.

muchas gracias

Pues ahora me da otro fallo y este si que no entiendo el motivo.

He modificado el código, le he añadido una operación para que el sensor mida unas revoluciones, calcule las revoluciones a las que debe ir el motor, y lo pase a pasos por segundo.
Pues no se como, en ocasiones los pasos por segundo da en negativo, cuando en todo momento las operaciones deberían dar positivo.

Pongo el código a ver cual es la tontería que me está dando dolores de cabeza:

// Include the AccelStepper library:
#include <AccelStepper.h>

//Configuración del motor
// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:
#define dirPin 8
#define stepPin 9
#define motorInterfaceType 1
// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);


//Configuración cuentarevoluciones
volatile int contador = 0;   // Variable entera que se almacena en la RAM del Micro
int RPMh = 0;
int Lh = 0;
int RPMt = 0;
int PPSt = 0;
int periodo = 999;
unsigned long tiempo1 = 0;
unsigned long tiempo2 = 0;
unsigned long TiempoAhora = 0;

void setup() {
   Serial.begin(9600);
  // setup motor Set the maximum speed in steps per second:
  stepper.setMaxSpeed(204800); //Set the maximum speed in steps per second

  //setup contador
  attachInterrupt(0,interrupcion0,RISING);  // Interrupcion 0 (pin2) // LOW, CHANGE, RISING, FALLING
  tiempo1 = millis();
  
}
void loop() {
  //loop motor
  stepper.setSpeed(PPSt);// Set the speed in steps per second:
  stepper.runSpeed();// Step the motor with a constant speed as set by setSpeed():
  
  //loop contador
  tiempo2 = millis();
  if(tiempo2 > (tiempo1+periodo)){  //Si ha pasado 1 segundo ejecuta el IF
    tiempo1 = millis(); //Actualiza el tiempo actual
    RPMh=contador*1.154;// Como son dos interrupciones por vuelta (contador * (60/2))
    contador = 0;
    Lh=((RPMh*360)/180)*PI*24.5;
    RPMt=((Lh/(PI*12.5))*180)/360;
    PPSt=(RPMt*6400); 
    Serial.print(RPMh); 
    Serial.print("RPM ");    //  El numero 2 depende del numero aspas de la helise del motor en prueba
    Serial.print(RPMt); 
    Serial.print("RPMt ");
    Serial.print(PPSt); 
    Serial.println("PPSt");
    }

  
}


void interrupcion0()    // Funcion que se ejecuta durante cada interrupion
{
  contador++;           // Se incrementa en uno el contador
}

Gracias a todos