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:
#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