Go Down

Topic: programmare arduino per easy Vr (Read 1 time) previous topic - next topic

Mar 01, 2013, 03:30 pm Last Edit: Mar 01, 2013, 04:37 pm by leo72 Reason: 1
Ciao a tutti, mi sono affacciato  in questo mondo da poco, ma sono molto attratto da questa piccola schedina, e dalle potenzialità che ha, premetto che di programmazione ne sò ben poco per cui ho deciso di postare la mia richiesta di aiuto.
ho fatto alcune prove  per iniziare a capirci qualcosa  e per fortuna mi sono riuscite, ma ora  arriva il difficile, vorrei realizzare  un sistema di riconoscimento vocale per una stanza  una cosa semplice, un comando= una risposta= una azione ..... ripetuta piu volte.....
Ho gia preparato i files audio che mi servono li ho montati sulla easy vr  e ho montato su arduino  il codice mi ha generato il commander riporto il codice quì sotto:


Code: [Select]
#if defined(ARDUINO) && ARDUINO >= 100
 #include "Arduino.h"
 #include "SoftwareSerial.h"
 SoftwareSerial port(12,13);
#else // Arduino 0022 - uso modificato NewSoftSerial
 #include "WProgram.h"
 #include "NewSoftSerial.h"
 NewSoftSerial port(12,13);
#endif

#include "EasyVR.h"
EasyVR easyvr(port);

//Gruppi e comandi
enum Groups
{
 GROUP_0  = 0,
 GROUP_1  = 1,
 GROUP_2  = 2,
 GROUP_3  = 3,
};

enum Group0
{
 G0_LIA = 0,
};

enum Group1
{
 G1_MUSICA = 1,
};

enum Group2
{
 G2_GRAZIE = 2,
};

enum Group3
{
 G3_PRESENTATI = 3,
};


EasyVRBridge bridge;

int8_t group, idx;

void setup()
{
 // modalità bridge?
 if (bridge.check())
 {
   cli();
   bridge.loop(0, 1, 12, 13);
 }
 // funzionare normalmente
 Serial.begin(9600);
 port.begin(9600);

 if (!easyvr.detect())
 {
   Serial.println("EasyVR non trovata!");
   for (;;);
 }

 easyvr.setPinOutput(EasyVR::IO1, LOW);
 Serial.println("EasyVR <Trovata!");
 easyvr.setTimeout(5);
 easyvr.setLanguage(1);

 group = EasyVR::TRIGGER; //<-- inizio gruppo (Personalizza)
}

void action();

void loop()
{
 easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED acceso (ascolto)

 Serial.print("Dire un comando nel gruppo ");
 Serial.println(group);
 easyvr.recognizeCommand(group);

 do
 {
   // può fare un po 'di elaborazione in attesa di un comando vocale
 }
 while (!easyvr.hasFinished());
 
 easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off

 idx = easyvr.getWord();
 if (idx >= 0)
 {
   // costruita nel grilletto (ROBOT)
   // group = GROUP_X; <-- passare a un altro gruppo X
   return;
 }
 idx = easyvr.getCommand();
 if (idx >= 0)
 {
   // stampa messaggio di debug
   uint8_t train = 0;
   char name[32];
   Serial.print("Comando: ");
   Serial.print(idx);
   if (easyvr.dumpCommand(group, idx, name, train))
   {
     Serial.print(" = ");
     Serial.println(name);
   }
   else
     Serial.println();
   easyvr.playSound(1, EasyVR::VOL_FULL);
   // eseguire una determinata azione
   action();
 }
 else // errori o timeout
 {
   if (easyvr.isTimeout())
     Serial.println("Tempo scaduto, prova di nuovo ...");
   int16_t err = easyvr.getError();
   if (err >= 0)
   {
     Serial.print("Error ");
     Serial.println(err, HEX);
   }
 }
}

void action()
{
   switch (group)
   {
   case GROUP_0:
     switch (idx)
     {
     case G0_LIA:
       // scrivere il codice di azione qui
       // group = GROUP_X; <-- o passare a un altro gruppo di X per i comandi compositi
       break;
     }
     break;
   case GROUP_1:
     switch (idx)
     {
     case G1_MUSICA:
       
     
     
       // wscrivere il codice di azione qui
       // group = GROUP_X; <-- o passare a un altro gruppo di X per i comandi compositi
       break;
     }
     break;
   case GROUP_2:
     switch (idx)
     {
     case G2_GRAZIE:
       // scrivere il codice di azione qui
       // group = GROUP_X; <-- o passare a un altro gruppo di X per i comandi compositi
       break;
     }
     break;
   case GROUP_3:
     switch (idx)
     {
     case G3_PRESENTATI:
       // scrivere il codice di azione qui
       // group = GROUP_X; <-- o passare a un altro gruppo di X per i comandi compositi
       break;
     }
     break;
   }
}

A gia dimenticavo  ho un arduino uno, easyVR
lo so che per voi può sembrare una bischerata ma ora non so proprio da che parte rifarmi.........
Grazie  in anticipo a tutti

edit by mod:
leggere il regolamento prima di postare


lesto

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

#2
Mar 02, 2013, 05:07 pm Last Edit: Mar 02, 2013, 07:46 pm by leo72 Reason: 1
Ciao, praticamente  vorrei sapere quale è la parte di codice fa fa eseguire le operazioni che ho scritto  "domanda risposta eseguzione " se non sbaglio questa e la parte che viene eseguita con il comando iniziale ........

Code: [Select]
Serial.println();
   easyvr.playSound(1, EasyVR::VOL_FULL);
   // eseguire una determinata azione
   action();




praticamente devo azionare 10 relè, chiamo la scheda e mi risponde con quella parte li  poi faccio una domanda , arduino risponde con la frase n° 10 per dire ,e chiude il relè 1...... spero di essere stato abbastanza chiaro..... Grazie

leo72


ehehhe quello lo conoscevo già..............pultroppo non cambia il risultato se sritto da un'altro  XD  .......grazie comunque  :)

leo72


ehehhe quello lo conoscevo già..............pultroppo non cambia il risultato se sritto da un'altro  XD  .......grazie comunque  :)

Io non uso la Easy VR ma ho capito, guardando gli sketch di esempio, che la lib restituisce una stringa contenente il comando ricevuto (sbaglio?). Per cui basta avviare delle funzioni in base a ciò che viene detto.

Go Up