Olá galera,
Estou fazendo um pequeno projeto de automação para o meu quarto. Estou usando um arduino mega 2560, um ethernet shield e um módulo de reconhecimento de voz EasyVR 2.0. Bom, de cara tive problema para conseguir fazer os dois shield funcionarem no mega ao mesmo tempo, ambos usavam os pinos 12 e 13 do arduino. Consegui fazer funcionar os dois shield, mudando os pinos que o EasyVR usa para comunicação serial colocando-os nos pinos 50 e 51, que de acordo com o manual, são portas que se pode utilizar para esse tipo de comunicação. Ai começa o problema, quando eu upo o código do EasyVR para o arduino funciona normalmente ( com o ethernet shield conectado tbm). Se eu adicionar no Setup() as linhas que inicializam o shield ethernet
Ethernet.begin(mac, ip);
server.begin();
nesse mesmo código que está funcional, o arduino não consegue mais reconhecer o shield de reconhecimento de voz e fico parado no
while (!easyvr.detect())
{
Serial.println("EasyVR not detected!");
delay(1000);
}
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#include "Platform.h"
#include "SoftwareSerial.h"
#ifndef CDC_ENABLED
// Shield Jumper on SW
SoftwareSerial port(50,51);
#else
// Shield Jumper on HW (for Leonardo)
#define port Serial1
#endif
#else // Arduino 0022 - use modified NewSoftSerial
#include "WProgram.h"
#include "NewSoftSerial.h"
NewSoftSerial port(50,51);
#endif
#include "EasyVR.h"
#include "C:\Users\Nando\Desktop\EasyVR Sounds\SONSPROJETOPORTUGUES.h"
#include <SPI.h>
#include <String.h>
#include <Ethernet.h>
EasyVR easyvr(port);
//Groups and Commands
enum Groups
{
GROUP_0 = 0,
GROUP_1 = 1,
GROUP_2 = 2,
GROUP_3 = 3,
GROUP_16 = 16,
};
enum Group0
{
G0_LINUX = 0,
};
enum Group1
{
G1_NANDO_SANTOS = 0,
};
enum Group2
{
G2_CORTINA = 0,
G2_ARCONDICIONADO = 1,
G2_LUZES = 2,
G2_FILME = 3,
G2_DORMIR = 4,
G2_TELEVISAO = 5,
G2_CONFIG = 6,
G2_STANDBY = 7,
};
enum Group3
{
G3_LIGAR = 0,
G3_DESATIVAR = 1,
};
enum Group16
{
G16_PASS_NANDO = 0,
};
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
EthernetServer server(80);
String readString = String(30); // string para buscar dados de endereço
boolean statusLed = false; // Variável para o status do led
EasyVRBridge bridge;
int idx_cmd;
int idx_pwd;
int8_t idx;
int8_t group = 0;
uint32_t mask = 0;
uint8_t train = 0;
int8_t trained_pw = 0; //number of existing passwords
int8_t trained_un = 0; //number of existing user names
bool lock = 0; // locked/unlocked flag
bool error = 0; // error flag
char name[32];
const int cortina = 22;
const int ar = 23;
const int luzes = 24;
int comando;
void setup()
{
Ethernet.begin(mac, ip); //LINHA DE CODIGO QUE PARA O EASYVR
server.begin(); //LINHA DE CODIGO QUE PARA O EASYVR
pinMode(luzes, OUTPUT);
pinMode(ar, OUTPUT);
pinMode(cortina, OUTPUT);
#ifndef CDC_ENABLED
// bridge mode?
if (bridge.check())
{
cli();
bridge.loop(0, 1, 50, 51);
}
// run normally
Serial.begin(9600);
Serial.println("Bridge not started!");
#else
// bridge mode?
if (bridge.check())
{
port.begin(9600);
bridge.loop(port);
}
Serial.println("Bridge connection aborted!");
#endif
port.begin(9600);
while (!easyvr.detect())
{
Serial.println("EasyVR not detected!");
delay(1000);
}
easyvr.setPinOutput(EasyVR::IO1, LOW);
Serial.println("EasyVR detected!");
easyvr.setTimeout(5);
easyvr.setLanguage(EasyVR::ENGLISH);
easyvr.setLevel(EasyVR::HARDER);
easyvr.setKnob(EasyVR::STRICTER);
}
Alguém já teve esse problema e pode compartilhar a solução ? Ou ao menos, me indicar algo para tentar fazer funcionar ? Não tenho mais ideias. Já tem duas semanas que tento fazer isso funcionar, procurei em fóruns, youtube, deepweb e ainda não achei.
Valeu!
