Go Down

Topic: [SOLUCIONADO] Voice recognizer v3  (Read 166 times) previous topic - next topic

EvAduina

Feb 27, 2020, 06:20 pm Last Edit: Feb 29, 2020, 11:41 am by EvAduina
Saludos, es mi primer post en este foro, aunque llevo aprendiendo mucho con vosotros, mas de un año. Vuestros consejos me han servido muchas veces para llevar a buen termino varios proyectos (invernadero, detector de movimiento,....).
Me decido a escribiros a ver si me podeis orientar que me he quedado atascada y mis conocimientos son limitados. Mi cuñado hace unos meses tuvo un accidente y quedo paralitico de cintura para abajo y me gustaria hacerle la vida un poco mas facil.
Se me ocurrio que con un arduino y un reconocedor de voz podria ayudarle a ser un poco mas independiente. Todo bien, hasta que  quise modificar el programa de ejemplo que viene con la libreria, pero no lo consigo.

Utilizo un Arduino Nano ATMEGA328 y un ELECHOUSE voice recognizer v3

Code: [Select]

/**
  ******************************************************************************
  * @file    vr_sample_control_led.ino
  * @author  JiapengLi
  * @brief   This file provides a demostration on
              how to control led by using VoiceRecognitionModule
  ******************************************************************************
  * @note:
        voice control led
  ******************************************************************************
  * @section  HISTORY
   
    2013/06/13    Initial version.
  */
 
#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];

bool eA = false, eU, c = false;

const byte Lampara = 13;
const byte Foco = 12;
const byte Foco2 = 11;
const byte Tele = 10;
const byte Humi = 9;

#define Lampara    (0)
#define Foco   (1)
#define Foco2  (2)
#define Tele   (3)
#define Humi   (4)
#define Encender   (5)
#define Apagar   (6)

/**
  @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(Lampara, OUTPUT);
  pinMode(Foco, OUTPUT);
  pinMode(Foco2, OUTPUT);
  pinMode(Tele, OUTPUT);
  pinMode(Humi, 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)Lampara) >= 0) {
    Serial.println("Lampara loaded");
  }

  if (myVR.load((uint8_t)Foco) >= 0) {
    Serial.println("Foco loaded");
  }

  if (myVR.load((uint8_t)Foco2) >= 0) {
    Serial.println("Foco2 loaded");
  }

  if (myVR.load((uint8_t)Tele) >= 0) {
    Serial.println("Television loaded");
  }

  if (myVR.load((uint8_t)Humi) >= 0) {
    Serial.println("Desmumidificador loaded");
  }

  if (myVR.load((uint8_t)Encender) >= 0) {
    Serial.println("Encender loaded");
  }

  if (myVR.load((uint8_t)Apagar) >= 0) {
    Serial.println("Apagar loaded");
  }

}

void loop()
{
  int ret;
  ret = myVR.recognize(buf, 50);
  if (ret > 0) {
    switch (buf[1]) {
      case Lampara:
        eA = digitalRead(Lampara);
        if (digitalRead(Lampara) && eA && !eU)   {
          c = !c;
          if (c) {
            digitalWrite(Lampara, HIGH);
          }
          else   {
            digitalWrite(Lampara, LOW);
          }
        }
        eU = eA;
        break;
      case Foco:
        eA = digitalRead(Foco);
        if (digitalRead(Foco) && eA && !eU)   {
          c = !c;
          if (c) {
            digitalWrite(Foco, HIGH);
          }
          else   {
            digitalWrite(Foco, LOW);
          }
        }
        eU = eA;
        break;
      case Foco2:
        eA = digitalRead(Foco2);
        if (digitalRead(Foco) && eA && !eU)   {
          c = !c;
          if (c) {
            digitalWrite(Foco2, HIGH);
          }
          else   {
            digitalWrite(Foco2, LOW);
          }
        }
        eU = eA;
        break;
      case Tele:
        eA = digitalRead(Tele);
        if (digitalRead(Tele) && eA && !eU)   {
          c = !c;
          if (c) {
            digitalWrite(Tele, HIGH);
          }
          else   {
            digitalWrite(Tele, LOW);
          }
        }
        eU = eA;
        break;
      case Humi:
        eA = digitalRead(Humi);
        if (digitalRead(Humi) && eA && !eU)   {
          c = !c;
          if (c) {
            digitalWrite(Humi, HIGH);
          }
          else   {
            digitalWrite(Humi, LOW);
          }
        }
        eU = eA;
        break;
      case Encender:

        digitalWrite(Lampara, HIGH);
        digitalWrite(Foco, HIGH);
        digitalWrite(Foco2, HIGH);

        break;
      case Apagar:

        digitalWrite(Lampara, LOW);
        digitalWrite(Foco, LOW);
        digitalWrite(Foco2, LOW);
        digitalWrite(Tele, LOW);
        digitalWrite(Humi, LOW);

        break;
      default:
        Serial.println("Record function undefined");
        break;
    }
    /** voice recognized */
    printVR(buf);
  }
}


l
Aunque compìla bien, despues no reconoce el voice recognizer, aunque si solo dejo....

Code: [Select]

#define Lampara    (0)
#define Foco   (1)
/*
#define Foco2  (2)
#define Tele   (3)
#define Humi   (4)
#define Encender   (5)
#define Apagar   (6)
*/
/**



los dos primeros funciona. Creo que el problema esta es esta seccion del programa, pero no estoy muy segura, y no me aclaro bien con el manual del voice recognizer v3.

Code: [Select]

/**
  @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("]");
    }
  }



 ¿ Es ahi donde estaria el numero de voces reconocidas ?

Me gustaria llevar a buen termino el proyecto para ayudar a mi cuñado y poder ofrecerselo a todo el mundo y ayudar a mas gente.

Gracias por todo, os estare eternamente agradecida.

surbyte

El sistema te reconoce solo dos porque es lo que tienes indicado que reconozca
Mira este ejemplo y pruébalo primero y luego modífícalo a tu gusto.

Reconocimiento de voz de Prometec

EvAduina

#2
Feb 27, 2020, 08:26 pm Last Edit: Feb 27, 2020, 08:30 pm by EvAduina
Gracias por tu respuesta, de ahi he tomado la referencia, como veras es lo que he hecho, cambiadas las variables, cambiados los comandos, declarar los pines de salida, incluidas las estructuras IF, pero no explica donde estaria la parte del programa para cambiar ese dato.

Mirando esta parte del programa

  @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

Code: [Select]

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("]");
    }
  }
}



Veo esa indicacion pero no estoy segura, si es ese el dato que tengo que modificar, solo necesito esa orientacion para seguir adelante.

Gracias por todo

surbyte

Pareciera que si.
Pero lo ves en el ejemplo

Yo veo esto, por un lado definen

Code: [Select]
uint8_t records[7]; // save record

luego p.ej definen 2
Code: [Select]

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


y en el loop solo ves dos

Code: [Select]
  if(myVR.load((uint8_t)onRecord) >= 0){
    Serial.println("onRecord loaded");
  }
 
  if(myVR.load((uint8_t)offRecord) >= 0){
    Serial.println("offRecord loaded");
  }


Si quieres mas, entonces debes definir todas las acciones de myVR.load

EvAduina

#4
Feb 28, 2020, 02:02 pm Last Edit: Feb 28, 2020, 02:03 pm by EvAduina
Vuelvo a agradecerte tu respuesta. En el primer codigo que postee venian incluidas las modificaciones que habia incluido. Lo vuelvo a colgar con las modificaciones.

Code: [Select]
#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];

bool eA = false, eU, c = false;

const byte Lampara = 13;
const byte Foco = 12;
const byte Foco2 = 11;
const byte Tele = 10;
const byte Humi = 9;

#define Lampara    (0)
#define Foco   (1)
#define Foco2  (2)
#define Tele   (3)
#define Humi   (4)
#define Encender   (5)
#define Apagar   (6)

/**
  @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(Lampara, OUTPUT);
  pinMode(Foco, OUTPUT);
  pinMode(Foco2, OUTPUT);
  pinMode(Tele, OUTPUT);
  pinMode(Humi, 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)Lampara) >= 0) {
    Serial.println("Lampara loaded");
  }

  if (myVR.load((uint8_t)Foco) >= 0) {
    Serial.println("Foco loaded");
  }

  if (myVR.load((uint8_t)Foco2) >= 0) {
    Serial.println("Foco2 loaded");
  }

  if (myVR.load((uint8_t)Tele) >= 0) {
    Serial.println("Television loaded");
  }

  if (myVR.load((uint8_t)Humi) >= 0) {
    Serial.println("Desmumidificador loaded");
  }

  if (myVR.load((uint8_t)Encender) >= 0) {
    Serial.println("Encender loaded");
  }

  if (myVR.load((uint8_t)Apagar) >= 0) {
    Serial.println("Apagar loaded");
  }

}

void loop()
{
  int ret;
  ret = myVR.recognize(buf, 50);
  if (ret > 0) {
    switch (buf[1]) {
      case Lampara:
        eA = digitalRead(Lampara);
        if (digitalRead(Lampara) && eA && !eU)   {
          c = !c;
          if (c) {
            digitalWrite(Lampara, HIGH);
          }
          else   {
            digitalWrite(Lampara, LOW);
          }
        }
        eU = eA;
        break;
      case Foco:
        eA = digitalRead(Foco);
        if (digitalRead(Foco) && eA && !eU)   {
          c = !c;
          if (c) {
            digitalWrite(Foco, HIGH);
          }
          else   {
            digitalWrite(Foco, LOW);
          }
        }
        eU = eA;
        break;
      case Foco2:
        eA = digitalRead(Foco2);
        if (digitalRead(Foco) && eA && !eU)   {
          c = !c;
          if (c) {
            digitalWrite(Foco2, HIGH);
          }
          else   {
            digitalWrite(Foco2, LOW);
          }
        }
        eU = eA;
        break;
      case Tele:
        eA = digitalRead(Tele);
        if (digitalRead(Tele) && eA && !eU)   {
          c = !c;
          if (c) {
            digitalWrite(Tele, HIGH);
          }
          else   {
            digitalWrite(Tele, LOW);
          }
        }
        eU = eA;
        break;
      case Humi:
        eA = digitalRead(Humi);
        if (digitalRead(Humi) && eA && !eU)   {
          c = !c;
          if (c) {
            digitalWrite(Humi, HIGH);
          }
          else   {
            digitalWrite(Humi, LOW);
          }
        }
        eU = eA;
        break;
      case Encender:

        digitalWrite(Lampara, HIGH);
        digitalWrite(Foco, HIGH);
        digitalWrite(Foco2, HIGH);

        break;
      case Apagar:

        digitalWrite(Lampara, LOW);
        digitalWrite(Foco, LOW);
        digitalWrite(Foco2, LOW);
        digitalWrite(Tele, LOW);
        digitalWrite(Humi, LOW);

        break;
      default:
        Serial.println("Record function undefined");
        break;
    }
    /** voice recognized */
    printVR(buf);
  }
}



Gracias de nuevo

surbyte


EvAduina

No, aunque compila bien, no reconoce el reconocedor de voz. Como os comente en el primer post solo funciona con  dos definiciones.
De ahi mi pregunta.... en que parte del codigo estan reconocidas las definiciones ?
No estoy segura....

surbyte

Yo no tengo la placa, asi que mas que lo que veo en el tutorial no puedo decirte.
Si el tutorial dice que funciona y a ti no, realmente poco mas puedo decirte.

La librería incluso tiene el mismo ejemplo.

EvAduina

Muchisimas gracias por todo. Estoy muy ilusionada con el proyecto y quiero terminarlo cueste lo que cueste. Creo que tanto mi cuñado como todas las personas con movilidad reducida, ya sea por enfermedad o accidente, necesitan de todo el apoyo y la ayuda posible para facilitarles su ya maltrecha vida.
No os podeis imaginar el par de meses de angustia y dolor en el Hospital Nacional de Paraplejicos en Toledo  que pasamos todos (enfermos, familiares,....), aunque tienen un personal medico digno de alabanza, que infunden un rayo de luz y esperanza a la constante deshumanizacion que vivimos dia a dia.

Perdonarme por la reflexion y permitidme un par de consideraciones por si a alguien se le ocurre alguna idea y me puede orientar :

1ª.- Si al codigo modificado le dejo solo con dos definiciones, dejo entre /* y */ todo lo demas, funciona perfectamente. En cuanto incorporas una definicion mas, deja de reconocer el dispositivo, por lo que me hace sospechar que tiene que haber algun parametro que indique cuantas definiciones tiene que cargar. En esta parte del codigo da una pequeña orientacion al respecto.

Code: [Select]

/**
  @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



Y veo....

             buf[0]  -->  Group mode(FF: None Group, 0x8n: User, 0x0n:System
             buf[1]  -->  number of record which is recognized.


y me doy cuenta un poco mas adelante que....

int i;
  for (i = 0; i < len; i++) {
    if (buf > 0x19 && buf < 0x7F) {
      Serial.write(buf);
    }


¿ Seran 0x19 y 0x7F las posiciones o las partes de memoria donde estan situadas ?. Porque grabe lo que grabe en la posicion (0) y (1).. (Encender, Apagar, Abrir, Cerrar,....), lo reconoce sin problemas.

2ª.- Por cierto,....surbyte, una sugerencia que te cogi prestada y que me ha funcionado otras veces.....me gustaria poder utilizar un comando para encender y apagar un RELE, en el ejemplo utilizan dos comandos onRecord y offRecord para encender y apagar, y se me ocurrio....

Code: [Select]
bool eA = false, eU, c = false;

....................

const byte Foco = 12;

....................

  case Foco:
        eA = digitalRead(Foco);
        if (digitalRead(Foco) && eA && !eU)   {
          c = !c;
          if (c) {
            digitalWrite(Foco, HIGH);
          }
          else   {
            digitalWrite(Foco, LOW);
          }
        }
        eU = eA;


Para que si esta apagada se encienda y si esta encendida que se apague, pero no lo hace....
 ¿ Alguna sugerencia ?...

Vuelvo a agradeceros vuestra ayuda. Gracias a todos

EvAduina

#9
Feb 29, 2020, 11:28 am Last Edit: Feb 29, 2020, 11:33 am by EvAduina
Por fin,.....todo llego a buen termino....estoy orgullosa de haber conseguido este objetivo que para mi era impensable hace mas un año cuando me embarque en la aventura llamada ARDUINO.

Antes de colgar el codigo tengo que hacer una aclaracion....

El codigo esta sacado de Internet, y aun siendo igual que el mio ( basado en el ejemplo que viene por defecto), este funciona y el mio no ( misterios del universo......). Pude solucionar el encendido y apagado con el mismo comando con una simple instruccion IF / ELSE.

Code: [Select]

#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 lampara = 13;
int foco = 12;
int foco2 = 11;
int tele = 10;
int humi = 9;


#define strong    (1)
#define weak   (3)
#define mbde (2)
#define on (0)

#define bad (4)

/**
  @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(lampara, OUTPUT);
  pinMode(foco, OUTPUT);
  pinMode(foco2, OUTPUT);
  pinMode(tele, OUTPUT);
  pinMode(humi, 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)strong) >= 0) {
    Serial.println("strong");

  }

  if (myVR.load((uint8_t)weak) >= 0) {
    Serial.println("weak");

  }

  if (myVR.load((uint8_t)mbde) >= 0) {
    Serial.println("mbde");

  }

  if (myVR.load((uint8_t)on) >= 0) {
    Serial.println("on");

  }

  if (myVR.load((uint8_t)bad) >= 0) {
    Serial.println("bad");

  }
}

void loop()
{
  int ret;
  ret = myVR.recognize(buf, 50);
  if (ret > 0) {
    switch (buf[1]) {
      case weak:
        if (digitalRead(tele) == 0) {
          digitalWrite(tele, HIGH);
          Serial.println("Television Encendida");
        }
        else {
          digitalWrite(tele, LOW);
          Serial.println("Television Apagada");
        }
        break;

      case bad:
        if (digitalRead(humi) == 0) {
          digitalWrite(humi, HIGH);
          Serial.println("Deshumidificador Encendido");
        }
        else {
          digitalWrite(humi, LOW);
          Serial.println("Deshumidificador Apagado");
        }
        break;


      case strong:
        if (digitalRead(foco) == 0) {
          digitalWrite(foco, HIGH);
          Serial.println("Foco Encendido");
        }
        else {
          digitalWrite(foco, LOW);
          Serial.println("Foco Apagado");
        }
        break;


      case on:
        if (digitalRead(lampara) == 0) {
          digitalWrite(lampara, HIGH);
          Serial.println("Lampara Encendida ;)");
        }
        else {
          digitalWrite(lampara, LOW);
          Serial.println("Lampara Apagada ;)");
        }
        break;


      case mbde:
        if (digitalRead(foco2) == 0) {
          digitalWrite(foco2, HIGH);
          Serial.println("Foco2 encendido ;)");
        }
        else {
          digitalWrite(foco2, LOW);
          Serial.println("Foco2 Apagado ;)");
        }

        break;

      default:
        Serial.println("Record function undefined");
        break;
    }
    /** voice recognized */
    printVR(buf);
  }
}


Cualquier sugerencia, modificacion, cambio,  cualquier cosa que se os ocurra sera bien recibido para que sea un proyecto del que todos y todas nos sintamos orgullosos y orgullosas.

Cuando lo tenga acabado fisicamente lo colgare en PROYECTOS.
Gracias a todos....UN SALUDO

surbyte

No cuelgues en proyectos algo que esta documentado como esto.
Una cosa es lo que tu mencionabas : si te mal entendí, el problema tenía que ver con que solo funcionaba con dos comandos.
Te comenté que era algo dificil de creer ya que tanto la librería como los tutoriales (basados en la librería) ponían ejemplos similares.

Ahora lo que mencionas al final es que lo que querías hacer era un simple comando prender apagar pero eso no fue lo que yo entendí que solicitabas.

Una manera de hacer eso sería algo asi.

defines una variable bool o sea algo tan simple como un SI o NO, true o false.

y luego con esa variable cada vez que le digas un comando, lo que le dices es que cambie de valor de 1 a 0 y de nuevo a a 1.

Supongamos que fuera

Code: [Select]
bool flag = false; // lo inicias apagado

luego cuando reconoces el comando de voz haces


Code: [Select]
   flag = !flag;      // cambias de estado


y mas tarde con flag controlas


Code: [Select]
if (flag) {
   digitalWrite(pin, HIGH);   // activas
else
   digitalWrite(pin, LOW);   // desactivas.

   

O sea que con 1 comando prendes y apagas lo mismo.


EvAduina

Muchisimas gracias tendre muy en cuenta tu sugerencia.

Go Up