Control de voz

Buenos días,
Estoy desarrollando un pequeño programa para el controlar un mando de una silla de ruedas por voz. Tengo un problema, que no soy capaz de solucionar. Quiero poner una palabra clave, para que después pueda dar otra otra orden. Tipo "ok google". Os coloco lo que llevo hecho. Mi problema, es que no consigo que el programa entre en el "switch(buf[1])".
¿Podrían darme alguna idea que me pueda ayudar?. Gracias.
Un saludo

#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"


/**        
 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 rele0 = 9;
int rele1 = 10;
int rele2 = 11;


#define kite    (1)
#define marcha     (2)
#define perfilmas     (3) 
#define reclina     (4)
#define okkite     (5)




/**
 @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(rele0, OUTPUT);
 pinMode(rele1, OUTPUT);
 pinMode(rele2, OUTPUT);
 digitalWrite(rele0, HIGH);
 digitalWrite(rele1, HIGH);
 digitalWrite(rele2, HIGH); 
   
 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)marcha) >= 0){
   Serial.println("Enciende rele 0");
 }
 
 if(myVR.load((uint8_t)perfilmas) >= 0){
   Serial.println("Enciende rele 1");
 }
 if(myVR.load((uint8_t)reclina) >= 0){
   Serial.println("Enciende rele 2");
 }
if(myVR.load((uint8_t)okkite) >= 0){
   Serial.println("Enciende rele kite");
}
if(myVR.load((uint8_t)kite) >= 0){
   Serial.println("Enciende rele kite");
}
}


void loop()
{
 int ret;
 ret = myVR.recognize(buf, 50);
 if(ret>0){
   if ((buf[1]) == okkite ) {
    Serial.println("dentro del if de okkite"); 
     printVR(buf);
           
             int ret;
             ret = myVR.recognize(buf, 50);
             if(ret>0){
                printVR(buf);
                Serial.println ("antes del switch");
                switch(buf[1]){
                   case marcha:
                   digitalWrite(rele0, LOW);
                   delay (1500);
                   digitalWrite(rele0, HIGH);
                   break;
                   case perfilmas:
                   digitalWrite(rele1, LOW);
                   delay (1500);
                   digitalWrite(rele1, HIGH);
                   break;
                   case reclina:
                   digitalWrite(rele2, LOW);
                   delay (1500);
                   digitalWrite(rele2, HIGH);
                   break;
                   default:
                   Serial.println("no lo pilla");
                   break;
           }
          }
   }
 else {
   Serial.println("no lectura");
 }
   
  
  printVR(buf);
 }
}

Hola, edita tu mensaje y lee las normas del foro para postear el código

#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"


/**        
  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 rele0 = 9;
int rele1 = 10;
int rele2 = 11;


#define kite    (1)
#define marcha     (2)
#define perfilmas     (3) 
#define reclina     (4)
#define okkite     (5)




/**
  @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(rele0, OUTPUT);
  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
  digitalWrite(rele0, HIGH);
  digitalWrite(rele1, HIGH);
  digitalWrite(rele2, HIGH); 
    
  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)marcha) >= 0){
    Serial.println("Enciende rele 0");
  }
  
  if(myVR.load((uint8_t)perfilmas) >= 0){
    Serial.println("Enciende rele 1");
  }
  if(myVR.load((uint8_t)reclina) >= 0){
    Serial.println("Enciende rele 2");
  }
if(myVR.load((uint8_t)okkite) >= 0){
    Serial.println("Enciende rele kite");
}
if(myVR.load((uint8_t)kite) >= 0){
    Serial.println("Enciende rele kite");
}
}


void loop()
{
  int ret;
  ret = myVR.recognize(buf, 50);
  if(ret>0){
    if ((buf[1]) == okkite ) {
     Serial.println("dentro del if de okkite"); 
      printVR(buf);
            
              int ret;
              ret = myVR.recognize(buf, 50);
              if(ret>0){
                 printVR(buf);
                 Serial.println ("antes del switch");
                 switch(buf[1]){
                    case marcha:
                    digitalWrite(rele0, LOW);
                    delay (1500);
                    digitalWrite(rele0, HIGH);
                    break;
                    case perfilmas:
                    digitalWrite(rele1, LOW);
                    delay (1500);
                    digitalWrite(rele1, HIGH);
                    break;
                    case reclina:
                    digitalWrite(rele2, LOW);
                    delay (1500);
                    digitalWrite(rele2, HIGH);
                    break;
                    default:
                    Serial.println("no lo pilla");
                    break;
            }
           }
    }
  else {
    Serial.println("no lectura");
  }
    
   
   printVR(buf);
  }
}

¿has visto esta documentación?

Sin la librería y la tarjeta, no se puede probar el código, así que esa debe ser la línea de búsqueda porque sólo el que sí la haya utilizado y tenga la puede probar, pero desde luego, el problema estará casi seguro en la línea 151

 ret = myVR.recognize(buf, 50);

Sin la tarjeta o se puede probar

Moderador:
Cuando se te pide que edites, no es crear un post nuevo, eso no es Editar!
Editar es modificar lo que has posteado indebidamente.

Ya lo hice por ti pero no llenes el hilo de información redundante en el futuro.

Observa que yo podría haber repetido el pedido de @TonyDiana pero no lo hice justamente para no ser reiterativo.
Se supone que todo el que escribe en un foro entiende y acepta las normas del mismo. Nadie es la excepción.

Respecto de tu consulta.
Tal como dice TonyDiana.

Con la librería tienes ejemplos. Comienza entendiéndolos debidamente y no sigas hasta que tengas una comprensión del 100% de los mismos.
Luego pasar de eso y prender LEDs o mover motores es mucho mas fácil.
Pero recuerda, siempre resuelve las cosas individualmente y cuando tienes algo que sabes que funciona, pasas a lo siguiente.
Por un lado el control de voz, por otro los motores. Luego integras y tienes todo funcionando.

Tu proyecto me preocupa porque al ver la librería observo que esta muy desactualizada.

VoiceRecognitionV3

Esto tiene una actualización de un minimo de 5 años o sea hablamos del 2016. Eso es una eternidad en este ambiente.

Te aconsejo que busques un IDE del 2018 máximo.

En el Getting Started figura el Realease Notes y entonces vemos que

ARDUINO 1.8.6 2018.08.23 tiene fecha 23 Agosto del 2018. Comienza instalando este y mira como se comporta tu código.

No intentes con el IDE ultima versión, no es aconsejable.

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