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);
}
}