20.02.2014, 09:41 | #131 |
Member
Регистрация: 19.02.2014
Сообщений: 40
Вес репутации: 0 |
Re: Голосовое управление нагрузками
Уважаемый Admin скажите я все сделал как в ссылке Описание работы с EasyVR.
Все получилось. Теперь я не могу разобрать куда подключать пины от easy vr и надоли переводить ардуино на другой режим. При програмировании easy в командоре пины были etx-tx erx-rx. И динамик подключать к ардуино spk и +5v. или к easy j2. |
20.02.2014, 11:15 | #132 | ||
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Голосовое управление нагрузками
Цитата:
Цитата:
|
||
20.02.2014, 14:45 | #133 |
Member
Регистрация: 19.02.2014
Сообщений: 40
Вес репутации: 0 |
Re: Голосовое управление нагрузками
Нет не шилд. Обычный я по форуму нашел скетч для програмирования команд т.к. тот что в базе не подошел а остальное все как написано. Звуки залил замкнув res и end и xm на 3.3v. Потом поставил скетч с темы и дальше все.
|
20.02.2014, 22:20 | #134 |
Member
Регистрация: 19.02.2014
Сообщений: 40
Вес репутации: 0 |
Re: Голосовое управление нагрузками
Вот скетч.
Код:
#if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #include "SoftwareSerial.h" SoftwareSerial port(12,13); #else // Arduino 0022 - use modified NewSoftSerial #include "WProgram.h" #include "NewSoftSerial.h" NewSoftSerial port(12,13); #endif #include "EasyVR.h" #define SND_AUDIO_1 1 #define SND_AUDIO_2 2 #define SND_AUDIO_3 3 #define SND_AUDIO_4 4 EasyVR easyvr(port); EasyVRBridge bridge; uint32_t mask = 0; int8_t group = 0; uint8_t train = 0; char name[32]; void setup() { // bridge mode? if (bridge.check()) { cli(); bridge.loop(0, 1, 12, 13); } Serial.begin(9600); port.begin(9600); pinMode(2, OUTPUT); if (!easyvr.detect()) { Serial.println("EasyVR not detected!"); for (;;); } easyvr.setPinOutput(EasyVR::IO1, LOW); Serial.println("EasyVR detected!"); easyvr.setTimeout(5); easyvr.setLanguage(EasyVR::ITALIAN); int16_t count = 0; if (easyvr.getGroupMask(mask)) // get trained user names and passwords { uint32_t msk = mask; for (group = 0; group <= EasyVR::PASSWORD; ++group, msk >>= 1) { if (!(msk & 1)) continue; if (group == EasyVR::TRIGGER) Serial.print("Trigger: "); else if (group == EasyVR::PASSWORD) Serial.print("Password: "); else { Serial.print("Group "); Serial.print(group); Serial.print(": "); } count = easyvr.getCommandCount(group); Serial.println(count); for (int8_t idx = 0; idx < count; ++idx) { if (easyvr.dumpCommand(group, idx, name, train)) { Serial.print(idx); Serial.print(" = "); Serial.print(name); Serial.print(", Trained "); Serial.print(train, DEC); if (!easyvr.isConflict()) Serial.println(" times, OK"); else { int8_t confl = easyvr.getWord(); if (confl >= 0) Serial.print(" times, Similar to Word "); else { confl = easyvr.getCommand(); Serial.print(" times, Similar to Command "); } Serial.println(confl); } } } } } easyvr.setLevel(EasyVR::HARDER); easyvr.playSound(SND_AUDIO_1, EasyVR::VOL_FULL); digitalWrite(2, LOW); } void loop() { int idx_cmd; int idx_cmd2; int idx_pwd; Serial.println("Say a name computer"); easyvr.recognizeCommand(1); // recognise command in group 1 while (!easyvr.hasFinished()); // wait for user name idx_cmd = easyvr.getCommand(); // get recognised user name if (idx_cmd >= 0) { Serial.print("Name: "); if (easyvr.dumpCommand(1, idx_cmd, name, train)) Serial.println(name); else Serial.println(); easyvr.playSound(SND_AUDIO_3 , EasyVR::VOL_FULL); // ask a command Serial.println("Say the command"); easyvr.recognizeCommand(2); // set group 2 while (!easyvr.hasFinished()); // wait command idx_cmd2 = easyvr.getCommand(); if (idx_cmd2 == 0) { Serial.println("On"); easyvr.recognizeCommand(3); // set group 3 while (!easyvr.hasFinished()); // wait command idx_pwd = easyvr.getCommand(); if (idx_pwd == 0) { Serial.println("Light"); easyvr.playSound(SND_AUDIO_4 , EasyVR::VOL_FULL); digitalWrite(2, HIGH); } else Serial.println(); } if (idx_cmd2 == 1) // { Serial.println("Off"); easyvr.recognizeCommand(3); // set group 3 while (!easyvr.hasFinished()); // wait command idx_pwd = easyvr.getCommand(); if (idx_pwd == 0) { Serial.println("Ligh off"); easyvr.playSound(SND_AUDIO_4 , EasyVR::VOL_FULL); digitalWrite(2, LOW); } } int16_t err = easyvr.getError(); if (easyvr.isTimeout() || (err >= 0)) // { Serial.println("Error, try again..."); easyvr.playSound(SND_AUDIO_2 , EasyVR::VOL_FULL); } else { if (easyvr.isTimeout()) Serial.println("Timed out, try again..."); int16_t err = easyvr.getError(); if (err >= 0) { Serial.print("Error "); Serial.println(err, HEX); } } } } |
20.02.2014, 23:43 | #135 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Голосовое управление нагрузками
Скетч Вам чужой не подойдет, генерируйте скетч в программе
|
20.02.2014, 23:57 | #136 |
Member
Регистрация: 19.02.2014
Сообщений: 40
Вес репутации: 0 |
Re: Голосовое управление нагрузками
т.е этот скетч на easy vr sheild а на обычнай с кардуино нано не пойдет?
|
21.02.2014, 13:02 | #137 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Голосовое управление нагрузками
Цитата:
Я же Вам написал сгенерируйте скетч в программе commander |
|
21.02.2014, 13:47 | #138 |
Member
Регистрация: 19.02.2014
Сообщений: 40
Вес репутации: 0 |
Re: Голосовое управление нагрузками
Вот скетч который сгенерировал командер. Его надо просто залить или скомпановать с другим скетчем.
Код:
#if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #include "SoftwareSerial.h" SoftwareSerial port(12,13); #else // Arduino 0022 - use modified NewSoftSerial #include "WProgram.h" #include "NewSoftSerial.h" NewSoftSerial port(12,13); #endif #include "EasyVR.h" EasyVR easyvr(port); //Groups and Commands enum Groups { GROUP_1 = 1, GROUP_2 = 2, GROUP_3 = 3, }; enum Group1 { G1_COMRUTER = 0, }; enum Group2 { G2_ON = 0, G2_OFF = 1, }; enum Group3 { G3_LIGHT = 0, }; EasyVRBridge bridge; int8_t group, idx; 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 (;;); } 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_COMRUTER: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; } break; case GROUP_2: switch (idx) { case G2_ON: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; case G2_OFF: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; } break; case GROUP_3: switch (idx) { case G3_LIGHT: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; } break; } } |
21.02.2014, 14:03 | #139 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Голосовое управление нагрузками
Теперь в сгенерированом скетче вставляем свой код, который должен исполняться, вставлять туда где выделил красным
Для начала вставьте digitalWrite(13, ххх); case G1_COMRUTER: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; } break; case GROUP_2: switch (idx) { case G2_ON: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; case G2_OFF: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; } Вот Вам готовый пример который должен включать и выключать светодиод D13 По команде G2_ON включит и выключит по команде G2_OFF Код:
#if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #include "SoftwareSerial.h" SoftwareSerial port(12,13); #else // Arduino 0022 - use modified NewSoftSerial #include "WProgram.h" #include "NewSoftSerial.h" NewSoftSerial port(12,13); #endif #include "EasyVR.h" EasyVR easyvr(port); //Groups and Commands enum Groups { GROUP_1 = 1, GROUP_2 = 2, GROUP_3 = 3, }; enum Group1 { G1_COMRUTER = 0, }; enum Group2 { G2_ON = 0, G2_OFF = 1, }; enum Group3 { G3_LIGHT = 0, }; EasyVRBridge bridge; int8_t group, idx; void setup() { pinMode(13, 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_COMRUTER: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; } break; case GROUP_2: switch (idx) { case G2_ON: digitalWrite(13, HIGH); break; case G2_OFF: digitalWrite(13, LOW); break; } break; case GROUP_3: switch (idx) { case G3_LIGHT: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; } break; } } |
21.02.2014, 14:48 | #140 |
Member
Регистрация: 19.02.2014
Сообщений: 40
Вес репутации: 0 |
Re: Голосовое управление нагрузками
Скажите а чтоб получать ответы на команды нужно в скетче прописывать или в командере можно както сгенерировать. Audio залиты с сылки.
|
Здесь присутствуют: 8 (пользователей: 0 , гостей: 8) | |
|
|