Problemas ao compilar código da EasyVR

Estou fazendo a armadura do Iron Man em impressão 3d e farei com automação com comando de voz, mas estou tendo problemas na criação do código.
Antes: IDE com a biblioteca EasyVR, placa corretamente inserida no PC e testada com exemplo de código da biblioteca.
Problema está no código estou ainda estudando. Tem algo errado; não sei se é na ordem, hierarquia no código.
Basicamente a lógica do código, inicialmente as luzes estarão acesas (no capacete) e o servo motor está 0 graus. Chamo a "inteligência", ela responde que está ouvindo.
Digo "abrir capacete", recebo a voz de confirmação e as luzes apagam e os servos vão a 90 graus.
Por fim digo "fechar capacete", recebo uma voz de confirmação e os servos voltam pra 0 graus e os leds piscam rápido 3x e ficam acesos.

Segue como estou montando o código:

#include <Servo.h>
#include <EasyVR.h>
#include <SoftwareSerial.h>

// Definições de pinos
#define LED1_PIN 2
#define LED2_PIN 3
#define SERVO_PIN 9

// Inicialização do servo e do EasyVR
Servo servo;
EasyVR easyvr(Serial1);
EasyVRBridge bridge;

int ledState = HIGH; // LEDs inicialmente acesos

void setup() {
// Configuração dos pinos dos LEDs
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
digitalWrite(LED1_PIN, ledState);
digitalWrite(LED2_PIN, ledState);

// Configuração do servo
servo.attach(SERVO_PIN);
servo.write(0); // Capacete inicialmente fechado

// Inicialização da comunicação serial
Serial.begin(9600);
Serial1.begin(9600);

// Inicialização do EasyVR
if (!easyvr.detect()) {
Serial.println("EasyVR não detectado!");
while (1);
}
easyvr.setPinOutput(EasyVR::IO1, LOW); // Desativa o pino IO1
easyvr.setTimeout(5);
easyvr.setLanguage(EasyVR::ENGLISH);

//Groups and Commands
enum Groups
{
GROUP_0 = 0,
GROUP_1 = 1,
GROUP_16 = 16,
};

enum Group0
{
G0_EI_JARVIS = 0,
};

enum Group1
{
G1_ABRIR_CAPACETE = 0,
G1_FECHAR_CAPACETE = 1,
};

enum Group16
{
G16_EI_JARVIS = 0,
};

}

void loop() {
if (easyvr.hasFinished()) {
int idx = easyvr.getCommand();
if (idx >= 0) {
processCommand(idx);
}
}
}

void processCommand(int idx) {
switch (idx) {
case 0:
Serial.println("Pois não senhor?");
easyvr.playSound(2, EasyVR::VOL_FULL);
break;
case 1:
abrirCapacete();
break;
case 2:
fecharCapacete();
break;
}
}

void abrirCapacete() {
servo.write(90); // Abre o capacete
Serial.println("O capacete está aberto");
easyvr.playSound(1, EasyVR::VOL_FULL);
digitalWrite(LED1_PIN, LOW); // Apaga os LEDs
digitalWrite(LED2_PIN, LOW);
}

void fecharCapacete() {
servo.write(0); // Fecha o capacete
Serial.println("O capacete está fechado");
easyvr.playSound(3, EasyVR::VOL_FULL);
for (int i = 0; i < 3; i++) {
digitalWrite(LED1_PIN, LOW);
digitalWrite(LED2_PIN, LOW);
delay(200);
digitalWrite(LED1_PIN, HIGH);
digitalWrite(LED2_PIN, HIGH);
delay(200);
}
digitalWrite(LED1_PIN, HIGH); // Mantém os LEDs acesos
digitalWrite(LED2_PIN, HIGH);
}

Olá! Bem vindo ao Forum!

Nós costumamos recomendar a quem posta pela primeira vez que dê uma lida no tópico Como Obter o Melhor desse Fórum. Lá tem uma série de dicas interessantes sobre as informações que são necessárias para que as pessoas te ajudem de forma eficiente e como fornecer essas informações. São cinco minutos de leitura que vão te poupar muitos minutos em próximos posts!

Uma dessas dicas é como postar seu código corretamente. Do jeito que ele está (sem indentação e sem formatação) dificulta muito a leitura e a identificação dos erros mais comuns.

Você disse o que espera do programa e citou um problema com o código, uma possível inversão de ordem. Mas não disse o que é que está acontecendo. O que o programa está fazendo que é diferente do que era esperado?

Eu nunca trabalhei com a biblioteca EasyVR, mas senti falta no seu sketch da inicialização da biblioteca SoftwareSerial. A EasyVR usa a SoftwareSerial?

Você também não contou sobre o seu setup. Qual é a placa Arduino que você está usando? Que placa está "inserida no PC"?

Quanto melhor você detalhar seu projeto, mais fácil fica de outra pessoa ajudá-lo. :wink: