Использование EasyVR Shield 2.0 для управления внешними устройствами

Нет ответов
DEN75
Offline
Зарегистрирован: 16.01.2014

Здравствуйте уважаемые коллеги.

Приобрел EasyVR Shield 2.0 (фото прилагается) и пытаюсь заставить его работать с Arduino Uno для выполнения ряда банальных задач (например включить/выключить свет). 
Собственно с самим шилдом и программированием распознавания голосовых команд через EasyVR Commander 3.8.0., созданием и заливкой в шилд собственной Голосовой Таблицы с использованием голосовых файлов WAF полученных в программе Balabolka (с подгруженным голосом Acapela Group Alena) и их компрессией через программу Quick Synthesis 5.2.6. разобрался полностью. Спасибо толковому описанию устройства на сайте производителя и информации на сайте Амперки.

Что до сих пор не могу понять:
1. Есть два положения джампера на шилде - HW (осуществляет контроль работы модуля Easy VR с использование пинов 0 и 1 ардуино (RX, TX) и SW (осуществляет контроль работы модуля Easy VR скетчем залитым в Ардуино через пины 12-13 с использованием bridge mode. 
Последовательность моих действий следующая - устанавливаю шилд поверх ардуино, ставлю джампер в положение HW, подключаю USB к компу и ничего не подключается. 
Отключаю, джампер ставлю его в SW, подключаю - Ок. Ардуино подключена и в нее можно заливать скетч. 
Таким образом, первый вопрос - в чем проблема - почему в одном положении ардуина подключается к COM порту, в другом нет ?

2. Произвел настройку голосовых команд через EasyVR Commander (фото прилагается) - с этим проблем нет.

Далее, полазив на просторах интернета нашел и подработал такой вот скетч:

Заливаю вот такой скетч:
#include "Arduino.h"
#include "SoftwareSerial.h"
SoftwareSerial port(12,13);
#include "EasyVR.h"
EasyVR easyvr(port);

int ledsvet = 8;

//Groups and Commands
enum Groups
{
GROUP_1 = 1,
};
enum Group1
{
G1_SVET = 0,
G1_VIKL = 1,
};
EasyVRBridge bridge;
int8_t group, idx;

void setup()
{
// initialize the digital pin as an output.
pinMode(ledsvet, OUTPUT);
// bridge mode?
if (bridge.check())
{
cli();
bridge.loop(0, 1, 12, 13);
}
// run normally
Serial.begin(9600);
port.begin(9600);
if (!easyvr.detect())
{
Serial.println("EasyVR not detected!");
for (;;);
}
easyvr.setPinOutput(EasyVR::IO1, LOW);
Serial.println("EasyVR detected!");
easyvr.setTimeout(5);
easyvr.setLanguage(0);
group = EasyVR::TRIGGER; //<-- start group (customize)
}

void action();

void loop()
{
easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening)
Serial.print("Say a command in Group ");
Serial.println(group);
easyvr.recognizeCommand(group);
do
{
// can do some processing while waiting for a spoken command
}
while (!easyvr.hasFinished());
easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off
idx = easyvr.getWord();
if (idx >= 0)
{
// built-in trigger (ROBOT)
// group = GROUP_X; <-- jump to another group X
return;
}
idx = easyvr.getCommand();
if (idx >= 0)
{
// print debug message
uint8_t train = 0;
char name[32];
Serial.print("Command: ");
Serial.print(idx);
if (easyvr.dumpCommand(group, idx, name, train))
{
Serial.print(" = ");
Serial.println(name);
}
else
Serial.println();
easyvr.playSound(0, EasyVR::VOL_FULL);
// perform some action
action();
}
else // errors or timeout
{
if (easyvr.isTimeout())
Serial.println("Timed out, try again...");
int16_t err = easyvr.getError();
if (err >= 0)
{
Serial.print("Error ");
Serial.println(err, HEX);
}
}
}
void action()
{
switch (group)
{
case GROUP_1:
switch (idx)
{
case G1_SVET:
// write your action code here
// group = GROUP_X; <-- or jump to another group X for composite commands
digitalWrite(ledsvet, HIGH); // turn the LED on (HIGH is the voltage level)

break;
case G1_VIKL:
// write your action code here
// group = GROUP_X; <-- or jump to another group X for composite commands
digitalWrite(ledsvet, LOW); // turn the LED off (LOW is the voltage level)
break;
}
break;
}
}

В итоге после загрузки в ардуино монитор порта пишет следующее:

EasyVR detected!
Say a comand in Group 0
Time out, try again...
Say a comand in Group 0
Time out, try again
и т.д.
на голосовые команды не реагирует. Говорил ей Robot (думая что группа 0 это группа-триггер, но ничего не выходит. На подключенные команды в группе 1 - SVET (голос-Свет), VIKL (голос -Выключи) также ноль реакции. 

Вопрос - что не так и что ей не нравится ? Может в коде какая ерунда не указана ? Хотя он компилируется и в итоге модуль то он распознает.

3. Подскажите, как понимать код в следующей его части:

void setup()
{
// bridge mode?
if (bridge.check())
{
cli(); - Что происходит здесь? 
bridge.loop(0, 1, 12, 13); - Что происходит здесь? 
}
// run normally
Serial.begin(9600);
port.begin(9600);
if (!easyvr.detect())
{
Serial.println("EasyVR not detected!"); - Что происходит здесь? 
for (;;);
}

4. И наконец последний вопрос - подскажите как можно создать или еще лучше где можно посмотреть готовые скетчи с подгрузкой записанных в EasyVR shield в Sound table голосовых фраз для оживления диалога . Я обращаюсь - Робот, Ардуино отвечает - Слушаю и повинуюсь, я- свет, она - выполняю повелитель, я - выключи, она выполняю. Как и куда нужно все это прописать ?

Буду весьма благодарен за Ваши мудрые советы. Много голов всегда лучше чем одна.

Заранее благодарю.