Controlando motor de passo por voz

Pessoal bom dia!

Estou com um projeto que é fazer um motor de passo girar para os 2 dois lados usando a voz. Para isso comprei o voice recognition v3 e o driver ULN2003.
Fiz o teste separado do shield de voz usando 2 comandos para acender e apagar o led e funciono, fiz um programa para girar o motor para dois lados e funcionou tbm, porém quando eu “junto” os dois programa o comando de voz não funciona mais e o motor fica girando somente para um lado.
O comando que faz o motor girar para um lado eu coloquei junto da parte que faz o led acender e para girar pro outro lado na parte que faz o led apagar.
O programa está em anexo.
Álguem pode me ajudar?
Obrigado

prog.txt (3.4 KB)

#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"
#include <Stepper.h> // Incluindo a biblioteca do Motor de Passo
const int stepsPerRevolution = 65; // Numero de passo por volta
 
Stepper myStepper(stepsPerRevolution, 8,9,10,11); // Faz a inicializa
/**        
  Connection
  Arduino    VoiceRecognitionModule
   2   ------->     TX
   3   ------->     RX
*/
VR myVR(2,3);    // 2:RX 3:TX, you can choose your favourite pins.

uint8_t records[7]; // save record
uint8_t buf[64];

int led = 13;

#define onRecord    (0)
#define offRecord   (1) 

/**
  @brief   Print signature, if the character is invisible, 
           print hexible value instead.
  @param   buf     --> command length
           len     --> number of parameters
*/
void printSignature(uint8_t *buf, int len)
{
  int i;
  for(i=0; i<len; i++){
    if(buf[i]>0x19 && buf[i]<0x7F){
      Serial.write(buf[i]);
    }
    else{
      Serial.print("[");
      Serial.print(buf[i], HEX);
      Serial.print("]");
    }
  }
}

/**
  @brief   Print signature, if the character is invisible, 
           print hexible value instead.
  @param   buf  -->  VR module return value when voice is recognized.
             buf[0]  -->  Group mode(FF: None Group, 0x8n: User, 0x0n:System
             buf[1]  -->  number of record which is recognized. 
             buf[2]  -->  Recognizer index(position) value of the recognized record.
             buf[3]  -->  Signature length
             buf[4]~buf[n] --> Signature
*/
void printVR(uint8_t *buf)
{
  Serial.println("VR Index\tGroup\tRecordNum\tSignature");

  Serial.print(buf[2], DEC);
  Serial.print("\t\t");

  if(buf[0] == 0xFF){
    Serial.print("NONE");
  }
  else if(buf[0]&0x80){
    Serial.print("UG ");
    Serial.print(buf[0]&(~0x80), DEC);
  }
  else{
    Serial.print("SG ");
    Serial.print(buf[0], DEC);
  }
  Serial.print("\t");

  Serial.print(buf[1], DEC);
  Serial.print("\t\t");
  if(buf[3]>0){
    printSignature(buf+4, buf[3]);
  }
  else{
    Serial.print("NONE");
  }
  Serial.println("\r\n");
}

void setup()
{
  /** initialize */
  myVR.begin(9600);
  
  Serial.begin(115200);
  Serial.println("Elechouse Voice Recognition V3 Module\r\nControl LED sample");
  
  pinMode(led, OUTPUT);
    
  if(myVR.clear() == 0){
    Serial.println("Recognizer cleared.");
  }else{
    Serial.println("Not find VoiceRecognitionModule.");
    Serial.println("Please check connection and restart Arduino.");
    while(1);
  }
  
  if(myVR.load((uint8_t)onRecord) >= 0){
    Serial.println("onRecord loaded");
  }
  
  if(myVR.load((uint8_t)offRecord) >= 0){
    Serial.println("offRecord loaded");
  }
}

void loop()
{
   myStepper.setSpeed(300);
  int ret;
  ret = myVR.recognize(buf, 50);
  if(ret>0){
    switch(buf[1]){
      case onRecord:
        /** turn on LED */
        for (int i = 0; i < 50; i++){
                 myStepper.step(stepsPerRevolution);
                 }
        digitalWrite(led, HIGH);
        break;
        
      case offRecord:
        /** turn off LED*/
        for (int i = 0; i < 50; i++){
                myStepper.step(-stepsPerRevolution); // sentido horario
                }
        digitalWrite(led, LOW);
        break;
        
       default:
        Serial.println("Record function undefined");
        break;
    }
    /** voice recognized */
    printVR(buf);
  }
}

Assim de repente eu diria que muito possivelmente o teu problema tem a ver com a velocidade de comunicação com módulo de reconhecimento de voz e o facto da biblioteca de stepper bloquear enquanto está a dar os passos.

Sinceramente não vejo isso a ser resolvido de forma fácil principalmente por causa da UART em software.