Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.05.2014, 21:54   #1
artemka181
Junior Member
 
Регистрация: 24.12.2012
Сообщений: 19
Вес репутации: 0
artemka181 is an unknown quantity at this point
По умолчанию Re: Голосовое управление нагрузками

Цитата:
Сообщение от Admin Посмотреть сообщение
А если попробовать перезаписать команды?
Постоянно пишет ошибку "время ожидание истекло"
на любые действия.
До вчерашнего дня почти год работало все.
artemka181 вне форума   Ответить с цитированием
Старый 24.05.2014, 10:21   #2
Net
Junior Member
 
Регистрация: 24.05.2014
Сообщений: 5
Вес репутации: 0
Net is an unknown quantity at this point
По умолчанию Голосовое управление нагрузками

Как включить и выключить светодиоды? Все отлично работает.
Стандартный скетч с коммандера EasyVR.
Какие пины используются или как их назначить?

PHP код:
#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_0  0,
  
GROUP_1  1,
};

enum Group1 
{
  
G1_OPEN_LEFT_WINDOW 0,
  
G1_CLOSE_LEFT_WINDOW 1,
  
G1_OPEN_RIGHT_WINDOW 2,
  
G1_CLOSE_RIGHT_WINDOW 3,
  
G1_OPEN_ALL_WINDOWS 4,
  
G1_CLOSE_ALL_WINDOWS 5,
};


EasyVRBridge bridge;

int8_t groupidx;

void setup()
{
  
// bridge mode?
  
if (bridge.check())
  {
    
cli();
    
bridge.loop(011213);
  }
  
// run normally
  
Serial.begin(9600);
  
port.begin(9600);

  if (!
easyvr.detect())
  {
    
Serial.println("EasyVR not detected!");
    for (;;);
  }

  
easyvr.setPinOutput(EasyVR::IO1LOW);
  
Serial.println("EasyVR detected!");
  
easyvr.setTimeout(5);
  
easyvr.setLanguage(0);

  
group EasyVR::TRIGGER//<-- start group (customize)
}

void action();

void loop()
{
  
easyvr.setPinOutput(EasyVR::IO1HIGH); // 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::IO1LOW); // LED off

  
idx easyvr.getWord();
  if (
idx >= 0)
  {
    
// built-in trigger (ROBOT)
    
group GROUP_1// (<-- 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(groupidxnametrain))
    {
      
Serial.print(" = ");
      
Serial.println(name);
    }
    else
      
Serial.println();
    
easyvr.playSound(0EasyVR::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(errHEX);
    }
  }
}

void action()
{
    switch (
group)
    {
    case 
GROUP_1:
      switch (
idx)
      {
      case 
G1_OPEN_LEFT_WINDOW:
        
// write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        
break;
      case 
G1_CLOSE_LEFT_WINDOW:
        
// write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        
break;
      case 
G1_OPEN_RIGHT_WINDOW:
        
// write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        
break;
      case 
G1_CLOSE_RIGHT_WINDOW:
        
// write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        
break;
      case 
G1_OPEN_ALL_WINDOWS:
        
// write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        
break;
      case 
G1_CLOSE_ALL_WINDOWS:
        
// write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        
break;
      }
      break;
    }


Последний раз редактировалось Net; 24.05.2014 в 10:27.
Net вне форума   Ответить с цитированием
Старый 24.05.2014, 10:52   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Голосовое управление нагрузками

В функции action() вместо коментариев
Admin вне форума   Ответить с цитированием
Старый 26.05.2014, 21:14   #4
Net
Junior Member
 
Регистрация: 24.05.2014
Сообщений: 5
Вес репутации: 0
Net is an unknown quantity at this point
По умолчанию Re: Голосовое управление нагрузками

Спасибо! Заработало!
Есть еще вопросик, можно ли запрограммировать так что бы диод сам выключался например через десять секунд?

Если кто не поленится скиньте фрагмент кода.
Net вне форума   Ответить с цитированием
Старый 26.05.2014, 23:42   #5
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Голосовое управление нагрузками

При использовании библиотек TimerOne или CyberLib, можно реализовать
Admin вне форума   Ответить с цитированием
Старый 03.06.2014, 00:05   #6
Net
Junior Member
 
Регистрация: 24.05.2014
Сообщений: 5
Вес репутации: 0
Net is an unknown quantity at this point
По умолчанию Re: Голосовое управление нагрузками

Просмотрел библиотеки, пробывал применить но НО. Не работает.
В программировании не силен.

(Захотелось применить EasyVR к машине, что бы открывал и закрывал окна.)

Есть такой код, который отлично работает. (На данный момент в ардуинку вставлен светодиод (вместо окна от машины) который реагирует на первые две команды (вкл. и выкл.)).

Мне нужен только 'вкл.' во всех командах но никак не 'выкл.'
Поднять окно это 'вкл.'
Опустить окно это тоже 'вкл.'

(НЕ ПОЛУЧАЕТСЯ ПРИМЕНИТЬ ТАЙМЕР )

PHP код:
#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_0  0,
  
GROUP_1  1,
};

enum Group1 
{
  
G1_OPEN_LEFT_WINDOW 0,
  
G1_CLOSE_LEFT_WINDOW 1,
  
G1_OPEN_RIGHT_WINDOW 2,
  
G1_CLOSE_RIGHT_WINDOW 3,
  
G1_OPEN_WINDOWS 4,
  
G1_CLOSE_WINDOWS 5,
};


EasyVRBridge bridge;

int8_t groupidx;

void setup()
{
  
// bridge mode?
  
if (bridge.check())
  {
    
cli();
    
bridge.loop(011213);
  }
  
// run normally
  
Serial.begin(9600);
  
port.begin(9600);

  if (!
easyvr.detect())
  {
    
Serial.println("EasyVR not detected!");
    for (;;);
  }

  
easyvr.setPinOutput(EasyVR::IO1LOW);
  
Serial.println("EasyVR detected!");
  
easyvr.setTimeout(5);
  
easyvr.setLanguage(0);

  
group EasyVR::TRIGGER//<-- start group (customize)
  
  
pinMode(11OUTPUT);
  
digitalWrite(11LOW);
  
}

void action();

void loop()
{
  
easyvr.setPinOutput(EasyVR::IO1HIGH); // 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::IO1LOW); // LED off

  
idx easyvr.getWord();
  if (
idx >= 0)
  {
    
// built-in trigger (ROBOT)
    
group GROUP_1// (<-- 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(groupidxnametrain))
    {
      
Serial.print(" = ");
      
Serial.println(name);
    }
    else
      
Serial.println();
    
easyvr.playSound(0EasyVR::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(errHEX);
    }
  }
}

void action()
{
    switch (
group)
    {
    case 
GROUP_1:
      switch (
idx)
      {
      case 
G1_OPEN_LEFT_WINDOW:
        
// write your action code here
        
group GROUP_1// <-- or jump to another group X for composite commands
        
digitalWrite(11HIGH);
        break;
      case 
G1_CLOSE_LEFT_WINDOW:
        
// write your action code here
        
group GROUP_1// <-- or jump to another group X for composite commands
        
digitalWrite(11LOW);
        break;
      case 
G1_OPEN_RIGHT_WINDOW:
        
// write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        
break;
      case 
G1_CLOSE_RIGHT_WINDOW:
        
// write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        
break;
      case 
G1_OPEN_WINDOWS:
        
// write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        
break;
      case 
G1_CLOSE_WINDOWS:
        
// write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        
break;
      }
      break;
    }

Net вне форума   Ответить с цитированием
Старый 04.06.2014, 11:42   #7
YUR
Junior Member
 
Регистрация: 28.02.2013
Сообщений: 29
Вес репутации: 0
YUR is an unknown quantity at this point
По умолчанию Re: Голосовое управление нагрузками

Подскажите, пож-та, где ошибка! Использую vrbot. Суть кода: в первой группе записаны 2 голоса (1 ячейка один голос, 2 ячейка - другой). "Слушаем" первую группу всегда, при обнаружении 1-го голоса (1 яч.памяти) - идем на прием 2-й группы, при обнаружении 2-го голоса (2 яч. памяти) - переход на 3-ю группу. Во 2-й и 3-й группах записаны (соответствующими голосами, конечно же) команды на выполнения действий - отсылка кода передатчиком 315МГц.
Забегая вперед - Serial1 - т.к. использую Arduino Micro (32U4). Отдельно все работает, т.е. врбот и ардуина - другим кодом зажигал диод на 13-м пине и ардуина с передатчиком тоже - другим кодом слал коды пульта - свет включался.
А вот собрав все вместе и записав 2 голоса ни чего не работает...


PHP код:
 #include <RemoteSwitch.h>

#define RF1 229662  // свет 1- возле окна
#define RF2 229644  // свет 2 – над столом
#define RF3 330588  // свет 3 – люстра слабо
#define RF4 330570  // свет 4 – люстра ярко
// #define RF5 11111  // свободный канал пульта

#define PERIOD 238;   //period duration - полученные из монитор порта
#define PERIOD 237;
#define PERIOD 241;
#define PERIOD 240;


byte com 0

void setup() 
                      { 
                        
pinMode(13OUTPUT);    
                        
Serial1.begin(9600);
                        
delay(2000);
                        
Serial1.write(0xAA);
                        
Serial1.write(0x37);
                        
delay(1000);
                        
Serial1.write(0xAA);
                        
Serial1.write(0x21);
                        } 

void loop() 


while(
Serial1.available())
                                  {
                                    
com Serial1.read();
                                     switch(
com)
                                  {
  case 
0x11:
                 
Serial1.write(0xAA);  // вызываем из памяти 
                
Serial1.write(0x22); // команды 2-й группы 
                
delay(2000);

                                      while(
Serial1.available())
                                  {
                                    
com Serial1.read();
                                     switch(
com)
                                  {
                                       case 
0x21:
                                        
transmit(RF1);
                                       break;

                                     case 
0x22:
                                      
transmit(RF2);
                                      break;

                                      case 
0x23:
                                        
transmit(RF3);
                                      break;

                                      case 
0x24:
                                        
transmit(RF4);
                                      break;

                                      case 
0x25:
                                       
// transmit(RF5);
                                      
break;
                                 }
                                 }
delay(100); 
 break;


case 
0x12:
                 
Serial1.write(0xAA);  // вызываем из памяти 
                
Serial1.write(0x23); // команды 3-й группы 
                
delay(2000);

                                      while(
Serial1.available())
                                  {
                                    
com Serial1.read();
                                     switch(
com)
                                  {
                                       case 
0x31:
                                        
transmit(RF1);
                                      break;

                                     case 
0x32:
                                        
transmit(RF2);
                                      break;

                                      case 
0x33:
                                     
transmit(RF3);
                                      break;

                                      case 
0x34:
                                        
transmit(RF4);
                                      break;

                                      case 
0x35:
                                        
// transmit(RF5);
                                      
break;
                                 }
                                 }
delay(100); 
break;

}
}


void transmit(unsigned long rcode){
unsigned long code rcode;
unsigned long period PERIOD;
code |= (unsigned long)period << 23;
code |= 4L << 20//(|= 4L) цифра перед (L), это (условное число), количество повторов посылаемого сигнала. (соответственно и паузы)
RemoteSwitch::sendTelegram(code11); // RF transmitter pin - пин радио передатчика

YUR вне форума   Ответить с цитированием
Старый 04.06.2014, 11:44   #8
YUR
Junior Member
 
Регистрация: 28.02.2013
Сообщений: 29
Вес репутации: 0
YUR is an unknown quantity at this point
По умолчанию Re: Голосовое управление нагрузками

После выполнения команды система должна возвращаться к "прослушиванию" первой группы, т.е. той где голоса
YUR вне форума   Ответить с цитированием
Старый 04.06.2014, 14:25   #9
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Голосовое управление нагрузками

У меня код в шапке как раз расщитан на несколько голосов
Admin вне форума   Ответить с цитированием
Старый 04.06.2014, 16:24   #10
YUR
Junior Member
 
Регистрация: 28.02.2013
Сообщений: 29
Вес репутации: 0
YUR is an unknown quantity at this point
По умолчанию Re: Голосовое управление нагрузками

Что то он сложен для моего понимания. Хотелось бы заставить работать свой скетч..
YUR вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 12 (пользователей: 0 , гостей: 12)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 03:09. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика