Problema Arduino Uno con Easyvr Shield

Salve, siamo due ragazzi che stanno sviluppando un progetto per l'esame di una casa domotica con un impianto luce gestito tramite riconoscimento vocale con arduino easyvr... siamo riusciti ad arrivare ad un buon punto, solo che ora ci troviamo che l'ultima coppia di led (salone pin 12) quando avviamo rimane sempre accesa da subito... un altro problema è che vorremmo gestire 2 gruppi uno di accensione e uno di spegnimento, solo che come abbiamo fatto noi ci riconosce solo quelli del gruppo 1 di accensione, se vorremmo evitare di fare tutt un gruppo, dividendo quindi in 2 gruppi, come si deve modificare il codice?
se potete dare un occhiata generale per modificare anche altro, se manca qualcosa..
Grazie in anticipo :slight_smile:

#include "Bridge.h"
#include <Console.h>
#include <FileIO.h>
#include <HttpClient.h>
#include <Mailbox.h>
#include <Process.h>
#include <YunClient.h>
#include <YunServer.h>

#include "Arduino.h"
#if !defined(SERIAL_PORT_MONITOR)
  #error "Arduino version not supported. Please update your IDE to the latest version."
#endif

#if defined(SERIAL_PORT_USBVIRTUAL)
  // Shield Jumper on HW (for Leonardo and Due)
  #define port SERIAL_PORT_HARDWARE
  #define pcSerial SERIAL_PORT_USBVIRTUAL
#else
  // Shield Jumper on SW (using pins 12/13 or 8/9 as RX/TX)
  #include "SoftwareSerial.h"
  SoftwareSerial port(12, 13);
  #define pcSerial SERIAL_PORT_MONITOR
#endif

#include "EasyVR.h"

EasyVR easyvr(port);

#define SND_CASA_ACCENDI_TUTTE_LE_LUCI_1 1
#define SND_CASA_LUCE_CORRIDOIO_ACCESA_1 2
#define SND_CASA_LUCE_CORRIDOIO_SPENTA_2 3
#define SND_CASA_LUCI_SALONE_ACCESE_1  4
#define SND_CASA_LUCI_SALONE_SPENTE_2  5
#define SND_CASA_LUCI_BAGNO_ACCESE_1   6
#define SND_CASA_LUCI_BAGNO_SPENTE_2   7
#define SND_CASA_LUCI_CAMERA_DA_LETTO_ACCESE_1 8
#define SND_CASA_LUCI_CAMERA_DA_LETTO_SPENTE_2 9
#define SND_CASA_LUCI_CUCINA_ACCESE_1  10
#define SND_CASA_LUCI_CUCINA_SPENTE_2  11
#define SND_CASA_LUCI_GIARDINO_ACCESE_1 12
#define SND_CASA_LUCI_GIARDINO_SPENTE_2 13
#define SND_CASA_SPEGNI_TUTTE_LE_LUCI_2 14

const int pin_cucina= 6;
const int pin_bagno= 8;
const int pin_camera= 10;
const int pin_corridoio= 2;
const int pin_giardino= 4;
const int pin_salone= 12;

boolean powerOn = false;

//Groups and Commands
enum Groups
{
  GROUP_1  = 1,
  GROUP_2  = 2,
};

enum Group1 
{
  G1_ACCENDI_GIARDINO = 0,
  G1_ACCENDI_CUCINA = 1,
  G1_ACCENDI_BAGNO = 2,
  G1_ACCENDI_CORRIDOIO = 3,
  G1_ACCENDI_SALONE = 4,
  G1_ACCENDI_CAMERA_DA_LETTO = 5,
  G1_ACCENDI_CASA = 6,
};

enum Group2 
{
  G2_SPEGNI_GIARDINO = 0,
  G2_SPEGNI_CUCINA = 1,
  G2_SPEGNI_BAGNO = 2,
  G2_SPEGNI_CORRIDOIO = 3,
  G2_SPEGNI_SALONE = 4,
  G2_SPEGNI_CAMERA_DA_LETTO = 5,
  G2_SPEGNI_CASA = 6,
};

EasyVRBridge bridge;
int8_t group, idx;

void setup()
{
#ifndef CDC_ENABLED

  // bridge mode?

  if (bridge.check())
  {
    cli();
    bridge.loop(0, 1, 12, 13);

  }

  // 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(1);

  group = 1; //<-- start group (customize)

}

void action();

void loop()
{
  easyvr.setPinOutput(EasyVR::IO1, LOW); // 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_ACCENDI_GIARDINO:
      easyvr.playSound(SND_CASA_LUCI_GIARDINO_ACCESE_1, EasyVR::VOL_FULL);
       digitalWrite(pin_giardino, LOW);
        digitalWrite(pin_giardino, HIGH);
        break;
      case G1_ACCENDI_CUCINA:
        easyvr.playSound(SND_CASA_LUCI_CUCINA_ACCESE_1  , EasyVR::VOL_FULL);
         digitalWrite(pin_cucina, LOW);
        digitalWrite(pin_cucina, HIGH);
        break;
      case G1_ACCENDI_BAGNO:
      easyvr.playSound(SND_CASA_LUCI_BAGNO_ACCESE_1  , EasyVR::VOL_FULL);
       digitalWrite(pin_bagno, LOW);
        digitalWrite(pin_bagno, HIGH);
        break;
      case G1_ACCENDI_CORRIDOIO:
              easyvr.playSound(SND_CASA_LUCE_CORRIDOIO_ACCESA_1  , EasyVR::VOL_FULL);
       digitalWrite(pin_corridoio, LOW);
        digitalWrite(pin_corridoio, HIGH);
        break;
      case G1_ACCENDI_SALONE:
              easyvr.playSound(SND_CASA_LUCI_SALONE_ACCESE_1  , EasyVR::VOL_FULL);
       digitalWrite(pin_salone, LOW);
        digitalWrite(pin_salone, HIGH);
        break;
      case G1_ACCENDI_CAMERA_DA_LETTO:
              easyvr.playSound(SND_CASA_LUCI_CAMERA_DA_LETTO_ACCESE_1  , EasyVR::VOL_FULL);
       digitalWrite(pin_camera, LOW);
        digitalWrite(pin_camera, HIGH);
        break;
      case G1_ACCENDI_CASA:
             easyvr.playSound(SND_CASA_ACCENDI_TUTTE_LE_LUCI_1  , EasyVR::VOL_FULL);
       digitalWrite(pin_giardino, LOW);
        digitalWrite(pin_giardino, HIGH);
        digitalWrite(pin_cucina, LOW);
        digitalWrite(pin_cucina, HIGH);
        digitalWrite(pin_bagno, LOW);
        digitalWrite(pin_bagno, HIGH);
        digitalWrite(pin_corridoio, LOW);
        digitalWrite(pin_corridoio, HIGH);
        digitalWrite(pin_salone, LOW);
        digitalWrite(pin_salone, HIGH);
        digitalWrite(pin_camera, LOW);
        digitalWrite(pin_camera, HIGH);
        break;
      }
      break;
    case GROUP_2:
      switch (idx)
      {
      case G2_SPEGNI_GIARDINO:
          easyvr.playSound(SND_CASA_LUCI_GIARDINO_SPENTE_2  , EasyVR::VOL_FULL);
       digitalWrite(pin_giardino, HIGH);
        digitalWrite(pin_giardino, LOW);
        break;
      case G2_SPEGNI_CUCINA:
        easyvr.playSound(SND_CASA_LUCI_CUCINA_SPENTE_2  , EasyVR::VOL_FULL);
         digitalWrite(pin_cucina, HIGH);
        digitalWrite(pin_cucina, LOW);
        break;
      case G2_SPEGNI_BAGNO:
        easyvr.playSound(SND_CASA_LUCI_BAGNO_SPENTE_2  , EasyVR::VOL_FULL);
       digitalWrite(pin_bagno, HIGH);
        digitalWrite(pin_bagno, LOW);
        break;
      case G2_SPEGNI_CORRIDOIO:
           easyvr.playSound(SND_CASA_LUCE_CORRIDOIO_SPENTA_2  , EasyVR::VOL_FULL);
       digitalWrite(pin_corridoio, HIGH);
        digitalWrite(pin_corridoio, LOW);
        break;
      case G2_SPEGNI_SALONE:
           easyvr.playSound(SND_CASA_LUCI_SALONE_SPENTE_2  , EasyVR::VOL_FULL);
       digitalWrite(pin_salone, HIGH);
        digitalWrite(pin_salone, LOW);
        break;
      case G2_SPEGNI_CAMERA_DA_LETTO:
              easyvr.playSound(SND_CASA_LUCI_CAMERA_DA_LETTO_SPENTE_2  , EasyVR::VOL_FULL);
       digitalWrite(pin_camera, HIGH);
        digitalWrite(pin_camera, LOW);
        break;
      case G2_SPEGNI_CASA:
              easyvr.playSound(SND_CASA_SPEGNI_TUTTE_LE_LUCI_2  , EasyVR::VOL_FULL);
       digitalWrite(pin_giardino, HIGH);
        digitalWrite(pin_giardino, LOW);
          digitalWrite(pin_cucina, HIGH);
        digitalWrite(pin_cucina, LOW);
        digitalWrite(pin_bagno, HIGH);
        digitalWrite(pin_bagno, LOW);
        digitalWrite(pin_corridoio, HIGH);
        digitalWrite(pin_corridoio, LOW);
         digitalWrite(pin_salone, HIGH);
        digitalWrite(pin_salone, LOW);
         digitalWrite(pin_camera, HIGH);
        digitalWrite(pin_camera, LOW);
        break;
      }
      break;
    }
}

Leggo che la seriale software potrebbe essere sul pin 12.

if defined(SERIAL_PORT_USBVIRTUAL)
  // Shield Jumper on HW (for Leonardo and Due)
  #define port SERIAL_PORT_HARDWARE
  #define pcSerial SERIAL_PORT_USBVIRTUAL
#else
  // Shield Jumper on SW (using pins 12/13 or 8/9 as RX/TX)
  #include "SoftwareSerial.h"
  SoftwareSerial port(12, 13);
  #define pcSerial SERIAL_PORT_MONITOR
#endif

lo é?

Questa funzione cosa fa?

bridge.loop(0, 1, 12, 13);

I pin analogici possono essere usati come pin digitali.

Ciao Uwe

grandeeee ho cambiato pin togliendo il 12 e mettendolo in 11 e funziona!!! sei grande :smiley:
cmq il fatto del loop nn so bene a cosa servi e generato dal programma stesso.. su internet ho letto da una persona che ha scritto: "La variabile bridge è un oggetto che ha un metodo chiamato ciclo . Il codice chiama tale metodo con quattro argomenti numerici."
cmq per il fatto di usare entrambi i gruppi sai come posso fare?