Options

WAR MACHINE MARK III SKETCH

Was wondering if anyone here would be able to assist.

I am trying use the Arduino Uno + Music Maker Wav Shield (MP3 Sounds) and the Easy VR3 (pins 8/9) for the voice control. I also have a Pololu servo controller (haven't chose any pins on the Uno yet) which I plan to hook up via RX/TX to the Uno to control the servos for Shoulder Gun and arm guns (Guns will Pop up out of the gauntlet). I used the Easy VR commander to make my basic sketch for the commands. As a test, I was able to make some LEDs light up when I say Jarvis/Fire. This is about the max extent of my capabilities now. 

So what I am planning to do is have 4 leds (2 on the shoulder gun 1 ea in the gun barrels and 1 LED on each of the arm gun barrels) total of 4 LEDs for guns. All gun LEDs are on pin 6. When I say "Shoulder" the servo on the pololu servo controller (pin 0 on the Pololu) will move and rise the shoulder gun. When I say "Fire" I want the MP3 file titled "gun.Mp3" to sound off (Mp3 File titled "Gun") and flash/strobe the LEDs (orange/redish color).  When I say "Stop" the gun will stop firing. When I say "Safe" the guns servos will return the guns back into position" The Arm guns (pin 1 on the Pololu) will do the same and rise like the shoulder gun when I say "Arm". the return will command will also be "Safe"

The Unibeam will light up up and stay on when I say "You there" and a sound will play (Mp3 file is titled "jarvis.Mp3". 18 Neopixels on pin 10.  

When I say "stand down" it will play a MP3 file from Col Rhodes titled "Standdown.Mp3"

Any assistance you could provide I would be very grateful. I have popped a few brain vessels on this trying to get this started.   Here's what I have so far from the EasyVR Commander. 
-----------------------------------------------------------------------------------------------

 

Comments

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

    #if defined(__SAMD21G18A__)
      // Shield Jumper on HW (for Zero, use Programming Port)
      #define port SERIAL_PORT_HARDWARE
      #define pcSerial SERIAL_PORT_MONITOR
    #elif defined(SERIAL_PORT_USBVIRTUAL)
      // Shield Jumper on HW (for Leonardo and Due, use Native Port)
      #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);

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

    enum Group0 
    {
      G0_JARVIS = 0,
    };

    enum Group1 
    {
      G1_FIRE = 0,
      G1_SHOULDER = 1,
      G1_ARM = 2,
      G1_UNIBEAM_START_UP = 3,
      G1_STOP = 4,
      G1_STAND_DOWN = 5,
      G1_SAFE = 6,
    };

    //Grammars and Words
    enum Wordsets
    {
      SET_1  = -1,
      SET_2  = -2,
      SET_3  = -3,
    };

    enum Wordset1 
    {
      S1_ACTION = 0,
      S1_MOVE = 1,
      S1_TURN = 2,
      S1_RUN = 3,
      S1_LOOK = 4,
      S1_ATTACK = 5,
      S1_STOP = 6,
      S1_HELLO = 7,
    };

    enum Wordset2 
    {
      S2_LEFT = 0,
      S2_RIGHT = 1,
      S2_UP = 2,
      S2_DOWN = 3,
      S2_FORWARD = 4,
      S2_BACKWARD = 5,
    };

    enum Wordset3 
    {
      S3_ZERO = 0,
      S3_ONE = 1,
      S3_TWO = 2,
      S3_THREE = 3,
      S3_FOUR = 4,
      S3_FIVE = 5,
      S3_SIX = 6,
      S3_SEVEN = 7,
      S3_EIGHT = 8,
      S3_NINE = 9,
      S3_TEN = 10,
    };


    // use negative group for wordsets
    int8_t group, idx;

    void setup()
    {
      // setup PC serial port
      pcSerial.begin(9600);
    bridge:
      // bridge mode?
      int mode = easyvr.bridgeRequested(pcSerial);
      switch (mode)
      {
      case EasyVR::BRIDGE_NONE:
        // setup EasyVR serial port
        port.begin(9600);
        // run normally
        pcSerial.println(F("Bridge not requested, run normally"));
        pcSerial.println(F("---"));
        break;
        
      case EasyVR::BRIDGE_NORMAL:
        // setup EasyVR serial port (low speed)
        port.begin(9600);
        // soft-connect the two serial ports (PC and EasyVR)
        easyvr.bridgeLoop(pcSerial);
        // resume normally if aborted
        pcSerial.println(F("Bridge connection aborted"));
        pcSerial.println(F("---"));
        break;
        
      case EasyVR::BRIDGE_BOOT:
        // setup EasyVR serial port (high speed)
        port.begin(115200);
        pcSerial.end();
        pcSerial.begin(115200);
        // soft-connect the two serial ports (PC and EasyVR)
        easyvr.bridgeLoop(pcSerial);
        // resume normally if aborted
        pcSerial.println(F("Bridge connection aborted"));
        pcSerial.println(F("---"));
        break;
      }

      // initialize EasyVR  
      while (!easyvr.detect())
      {
        pcSerial.println(F("EasyVR not detected!"));
        for (int i = 0; i < 10; ++i)
        {
          if (pcSerial.read() == '?')
            goto bridge;
          delay(100);
        }
      }

      pcSerial.print(F("EasyVR detected, version "));
      pcSerial.print(easyvr.getID());

      if (easyvr.getID() < EasyVR::EASYVR3)
        easyvr.setPinOutput(EasyVR::IO1, LOW); // Shield 2.0 LED off

      if (easyvr.getID() < EasyVR::EASYVR)
        pcSerial.print(F(" = VRbot module"));
      else if (easyvr.getID() < EasyVR::EASYVR2)
        pcSerial.print(F(" = EasyVR module"));
      else if (easyvr.getID() < EasyVR::EASYVR3)
        pcSerial.print(F(" = EasyVR 2 module"));
      else
        pcSerial.print(F(" = EasyVR 3 module"));
      pcSerial.print(F(", FW Rev."));
      pcSerial.println(easyvr.getID() & 7);

      easyvr.setDelay(0); // speed-up replies

      easyvr.setTimeout(5);
      easyvr.setLanguage(0);

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

    void loop()
    {
      if (easyvr.getID() < EasyVR::EASYVR3)
        easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening)

      if (group < 0) // SI wordset/grammar
      {
        pcSerial.print("Say a word in Wordset ");
        pcSerial.println(-group);
        easyvr.recognizeWord(-group);
      }
      else // SD group
      {
        pcSerial.print("Say a command in Group ");
        pcSerial.println(group);
        easyvr.recognizeCommand(group);
      }

      do
      {
        // allows Commander to request bridge on Zero (may interfere with user protocol)
        if (pcSerial.read() == '?')
        {
          setup();
          return;
        }
        // <<-- can do some processing here, while the module is busy
      }
      while (!easyvr.hasFinished());
      
      if (easyvr.getID() < EasyVR::EASYVR3)
        easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off

      idx = easyvr.getWord();
      if (idx == 0 && group == EasyVR::TRIGGER)
      {
        // beep
        easyvr.playSound(0, EasyVR::VOL_FULL);
        // print debug message
        pcSerial.println("Word: ROBOT");
        // write your action code here
        // group = GROUP_X\SET_X; <-- jump to another group or wordset
        return;
      }
      else if (idx >= 0)
      {
        // beep
        easyvr.playSound(0, EasyVR::VOL_FULL);
        // print debug message
        uint8_t flags = 0, num = 0;
        char name[32];
        pcSerial.print("Word: ");
        pcSerial.print(idx);
        if (easyvr.dumpGrammar(-group, flags, num))
        {
          for (uint8_t pos = 0; pos < num; ++pos)
          {
            if (!easyvr.getNextWordLabel(name))
              break;
            if (pos != idx)
              continue;
            pcSerial.print(F(" = "));
            pcSerial.println(name);
            break;
          }
        }
        // perform some action
        action();
        return;
      }
      idx = easyvr.getCommand();
      if (idx >= 0)
      {
        // beep
        easyvr.playSound(0, EasyVR::VOL_FULL);
        // print debug message
        uint8_t train = 0;
        char name[32];
        pcSerial.print("Command: ");
        pcSerial.print(idx);
        if (easyvr.dumpCommand(group, idx, name, train))
        {
          pcSerial.print(" = ");
          pcSerial.println(name);
        }
        else
          pcSerial.println();
        // perform some action
        action();
      }
      else // errors or timeout
      {
        if (easyvr.isTimeout())
          pcSerial.println("Timed out, try again...");
        int16_t err = easyvr.getError();
        if (err >= 0)
        {
          pcSerial.print("Error ");
          pcSerial.println(err, HEX);
        }
      }
    }

    void action()
    {
      switch (group)
      {
      case GROUP_0:
        switch (idx)
        {
        case G0_JARVIS:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        }
        break;
      
  • Options
    case GROUP_1:
        switch (idx)
        {
        case G1_FIRE:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case G1_SHOULDER:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case G1_ARM:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case G1_UNIBEAM_START_UP:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case G1_STOP:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case G1_STAND_DOWN:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case G1_SAFE:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        }
        break;
      case SET_1:
        switch (idx)
        {
        case S1_ACTION:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S1_MOVE:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S1_TURN:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S1_RUN:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S1_LOOK:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S1_ATTACK:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S1_STOP:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S1_HELLO:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        }
        break;
      case SET_2:
        switch (idx)
        {
        case S2_LEFT:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S2_RIGHT:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S2_UP:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S2_DOWN:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S2_FORWARD:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S2_BACKWARD:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        }
        break;
      case SET_3:
        switch (idx)
        {
        case S3_ZERO:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S3_ONE:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S3_TWO:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S3_THREE:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S3_FOUR:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S3_FIVE:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S3_SIX:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S3_SEVEN:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S3_EIGHT:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S3_NINE:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        case S3_TEN:
          // write your action code here
          // group = GROUP_X\SET_X; <-- or jump to another group or wordset for composite commands
          break;
        }
        break;
      }
    }
Sign In or Register to comment.