General

DFR Mega 2560 + Mega Senors Sheild v3.4 + Bluetooth Bee connectivity to Android

userHead VanOosthuysen 2014-03-15 08:26:30 4279 Views1 Replies
I recently bought a DFRduino Mega kit for 4 motor robot to interface into a project. Thus far I have gotten the DFRduino Mega 2560 V3.0 and Mega IO Expansion/Mega Sensor Shield V2.3 For Arduino Mega up and controlling my Dagu rover 5 chassis with its Dagu 4ch motor controller.

What I am having issues with is connecting my Seeedunio Bluetooth Bee to the Mega 2560 through the Sensor Shield to control the whole thing via Android device.

I have tried the different COM ports and RXD/TXD points, but I am not getting any connection with the Bluetooth module. It is getting power, but does not go into the mode for connecting.

I have connected this Bluetooth Bee to a Arduino Uno via Seedunino Bees shield before and controlled several digital outputs over Bluetooth via android app without a problem.

Am I missing a patching issue on the board or am I programming wrongly?

I would like to use COM1 as, if I am understanding correctly COM0 is where the USB serial travels through. Am I correct in assuming this?

My Sketch Looks as follows:


#include <SoftwareSerial.h>
#define RxD 19
#define TxD 18
#define DEBUG_ENABLED 1
SoftwareSerial blueToothSerial(RxD,TxD);
char incoming;

int PinPWM_ch1 = 9;  //ch1 Power
int PinPWM_ch2 = 8;  //ch2
int PinPWM_ch3 = 7;  //ch3
int PinPWM_ch4 = 6;  //ch4

int PinDIR_ch1 = 14;  //ch1 Direction
int PinDIR_ch2 = 15;  //ch2
int PinDIR_ch3 = 16;  //ch3
int PinDIR_ch4 = 17;  //ch4

int Power = 255;

void setup()
{
  pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);
  setupBlueToothConnection();
  Serial1.begin(9600);
  pinMode(PinPWM_ch1,OUTPUT);  // left front motor pwm
  pinMode(PinPWM_ch2,OUTPUT);  // left back motor pwm
  pinMode(PinPWM_ch3,OUTPUT);  // right front motor pwm
  pinMode(PinPWM_ch4,OUTPUT);  // right back motor pwm

  pinMode(PinDIR_ch1,OUTPUT);  // left front motor dir
  pinMode(PinDIR_ch2,OUTPUT);  // left back motor dir
  pinMode(PinDIR_ch3,OUTPUT);  // right front motor dir
  pinMode(PinDIR_ch4,OUTPUT);  // right back motor dir
}

void setupBlueToothConnection()
{
  blueToothSerial.begin(38400); //Set BluetoothBee BaudRate to default baud rate 38400
  delay(1000);
  sendBlueToothCommand("\r\n+STWMOD=0\r\n");
  sendBlueToothCommand("\r\n+STNA=SeeeduinoBluetooth\r\n");
  sendBlueToothCommand("\r\n+STAUTO=0\r\n");
  sendBlueToothCommand("\r\n+STOAUT=1\r\n");
  sendBlueToothCommand("\r\n +STPIN=0000\r\n");
  delay(2000); // This delay is required.
  sendBlueToothCommand("\r\n+INQ=1\r\n");
  delay(2000); // This delay is required.
}

void CheckOK()
{
  char a,b;
  while(1)
  {
    if(blueToothSerial.available())
    {
      a = blueToothSerial.read();
      if('O' == a)
      {
        // Wait for next character K. available() is required in some cases, as K is not immediately available.
        while(blueToothSerial.available())
        {
          b = blueToothSerial.read();
          break;
        }
        if('K' == b)
        {
          break;
        }
      }
    }
  }
  while( (a = blueToothSerial.read()) != -1)
  {
    //Wait until all other response chars are received
  }
}
void sendBlueToothCommand(char command[])
{
  blueToothSerial.print(command);
  CheckOK();
}

void loop()
{
  // get character sent from Android device
  incoming=blueToothSerial.read();
  // decide what to do with it
  switch (incoming)
  {
  case 'g':
    Forward();
    blueToothSerial.println("Forward()");
    break;
  case 'v':
    Backward();
    blueToothSerial.println("Backward()");
    break;
  case 'c':
    TurnLeft();
    blueToothSerial.println("TurnLeft()");
    break;
  case 'b':
    TurnRight();
    blueToothSerial.println("TurnRight()");
    break;
  default:
    Stop();
    blueToothSerial.println("Stop()");
    break;
  }
  delay(100);
}

void Backward()
{
  digitalWrite(PinDIR_ch1,HIGH);  // turn all motors backwards
  digitalWrite(PinDIR_ch2,LOW); 
  digitalWrite(PinDIR_ch3,HIGH);
  digitalWrite(PinDIR_ch4,LOW);
  analogWrite(PinPWM_ch1,Power);    // provide power to all motors
  analogWrite(PinPWM_ch2,Power);
  analogWrite(PinPWM_ch3,Power);
  analogWrite(PinPWM_ch4,Power); 
}

void Stop()
{
  analogWrite(PinPWM_ch1,LOW);    // Stops all motors
  analogWrite(PinPWM_ch2,LOW);
  analogWrite(PinPWM_ch3,LOW);
  analogWrite(PinPWM_ch4,LOW);
}

void Forward()
{
  digitalWrite(PinDIR_ch1,LOW);  // turn all motors fowards
  digitalWrite(PinDIR_ch2,HIGH); 
  digitalWrite(PinDIR_ch3,LOW);
  digitalWrite(PinDIR_ch4,HIGH);
  analogWrite(PinPWM_ch1,Power);    // provide power to all motors
  analogWrite(PinPWM_ch2,Power);
  analogWrite(PinPWM_ch3,Power);
  analogWrite(PinPWM_ch4,Power); 
}

void TurnLeft()
{
  digitalWrite(PinDIR_ch1,HIGH);  // turns antclockwise
  digitalWrite(PinDIR_ch2,LOW); 
  digitalWrite(PinDIR_ch3,LOW);
  digitalWrite(PinDIR_ch4,HIGH);
  analogWrite(PinPWM_ch1,Power);    // provide power to all motors
  analogWrite(PinPWM_ch2,Power);
  analogWrite(PinPWM_ch3,Power);
  analogWrite(PinPWM_ch4,Power); 
}

void TurnRight()
{
  digitalWrite(PinDIR_ch1,LOW);  // turns antclockwise
  digitalWrite(PinDIR_ch2,HIGH); 
  digitalWrite(PinDIR_ch3,HIGH);
  digitalWrite(PinDIR_ch4,LOW);
  analogWrite(PinPWM_ch1,Power);    // provide power to all motors
  analogWrite(PinPWM_ch2,Power);
  analogWrite(PinPWM_ch3,Power);
  analogWrite(PinPWM_ch4,Power); 
}


?Thank You for your help in advance.?
2014-03-18 06:14:30 :)
Found my issue with help from the technical support. Code looks as follows.

Still under development:

char incoming;

int PinPWM_ch1 = 9;  // make sure these pin numbers are correct !!! ch1
int PinPWM_ch2 = 8;  //ch2
int PinPWM_ch3 = 7;  //ch3
int PinPWM_ch4 = 6;  //ch4

int PinDIR_ch1 = 14;  //ch1
int PinDIR_ch2 = 15;  //ch2
int PinDIR_ch3 = 16;    //ch3
int PinDIR_ch4 = 17;  //ch4

int Power = 255;
// 2 is right motors 1 is left motors

void setup()
{;
  setupBlueToothConnection();
  Serial.begin(9600);
  pinMode(PinPWM_ch1,OUTPUT);  // left front motor pwm
  pinMode(PinPWM_ch2,OUTPUT);  // left back motor pwm
  pinMode(PinPWM_ch3,OUTPUT);  // right front motor pwm
  pinMode(PinPWM_ch4,OUTPUT);  // right back motor pwm

  pinMode(PinDIR_ch1,OUTPUT);  // left front motor dir
  pinMode(PinDIR_ch2,OUTPUT);  // left back motor dir
  pinMode(PinDIR_ch3,OUTPUT);  // right front motor dir
  pinMode(PinDIR_ch4,OUTPUT);  // right back motor dir
}

void setupBlueToothConnection()
{
    Serial.print("Setting up Bluetooth link");      //For debugging, Comment this line if not required   
    Serial1.begin(38400); //Set BluetoothBee BaudRate to default baud rate 38400
    delay(1000);
    Serial1.print("\r\n+STWMOD=0\r\n");
    Serial1.print("\r\n+STNA=modem\r\n");
    Serial1.print("\r\n+STAUTO=0\r\n");
    Serial1.print("\r\n+STOAUT=1\r\n");
    Serial1.print("\r\n+STPIN=0000\r\n");
    delay(2000); // This delay is required.
    Serial1.print("\r\n+INQ=1\r\n");
    delay(2000); // This delay is required.
    Serial.print("Setup complete");
}

void CheckOK()
{
  char a,b;
  while(1)
  {
    if(Serial1.available())
    {
      a = Serial1.read();
      if('O' == a)
      {
        // Wait for next character K. available() is required in some cases, as K is not immediately available.
        while(Serial1.available())
        {
          b = Serial1.read();
          break;
        }
        if('K' == b)
        {
          break;
        }
      }
    }
  }
  while( (a = Serial1.read()) != -1)
  {
    //Wait until all other response chars are received
  }
}
void sendBlueToothCommand(char command[])
{
  Serial1.print(command);
  CheckOK();
}

void loop()
{
    // get character sent from Android device
  incoming=Serial1.read();
  // decide what to do with it
  switch (incoming)
  {
  case 'g':
    Forward();
    Serial1.println("Forward()");
    break;
  case 'v':
    Backward();
    Serial1.println("Backward()");
    break;
  case 'c':
    TurnLeft();
    Serial1.println("TurnLeft()");
    break;
  case 'b':
    TurnRight();
    Serial1.println("TurnRight()");
    break;
  default:
    Stop();
    Serial1.println("Stop()");
    break;
  }
 
  delay(100);
//  Forward();
//  delay(1000);
//  Stop();
//  delay(1000);
//  TurnRight();
//  delay(1000);
//  Stop();
//  delay(1000);
//  Forward();
//  delay(1000);
//  Stop();
//  delay(1000);
//  TurnRight();
//  delay(1000);
//  Stop();
//  delay(1000);
}

void Backward()
{
  digitalWrite(PinDIR_ch1,HIGH);  // turn all motors backwards
  digitalWrite(PinDIR_ch2,LOW); 
  digitalWrite(PinDIR_ch3,HIGH);
  digitalWrite(PinDIR_ch4,LOW);
  analogWrite(PinPWM_ch1,Power);    // provide power to all motors
  analogWrite(PinPWM_ch2,Power);
  analogWrite(PinPWM_ch3,Power);
  analogWrite(PinPWM_ch4,Power); 
}

void Stop()
{
  analogWrite(PinPWM_ch1,LOW);    // Stops all motors
  analogWrite(PinPWM_ch2,LOW);
  analogWrite(PinPWM_ch3,LOW);
  analogWrite(PinPWM_ch4,LOW);
}

void Forward()
{
  digitalWrite(PinDIR_ch1,LOW);  // turn all motors fowards
  digitalWrite(PinDIR_ch2,HIGH); 
  digitalWrite(PinDIR_ch3,LOW);
  digitalWrite(PinDIR_ch4,HIGH);
  analogWrite(PinPWM_ch1,Power);    // provide power to all motors
  analogWrite(PinPWM_ch2,Power);
  analogWrite(PinPWM_ch3,Power);
  analogWrite(PinPWM_ch4,Power); 
}

void TurnLeft()
{
  digitalWrite(PinDIR_ch1,HIGH);  // turns antclockwise
  digitalWrite(PinDIR_ch2,LOW); 
  digitalWrite(PinDIR_ch3,LOW);
  digitalWrite(PinDIR_ch4,HIGH);
  analogWrite(PinPWM_ch1,Power);    // provide power to all motors
  analogWrite(PinPWM_ch2,Power);
  analogWrite(PinPWM_ch3,Power);
  analogWrite(PinPWM_ch4,Power); 
}

void TurnRight()
{
  digitalWrite(PinDIR_ch1,LOW);  // turns antclockwise
  digitalWrite(PinDIR_ch2,HIGH); 
  digitalWrite(PinDIR_ch3,HIGH);
  digitalWrite(PinDIR_ch4,LOW);
  analogWrite(PinPWM_ch1,Power);    // provide power to all motors
  analogWrite(PinPWM_ch2,Power);
  analogWrite(PinPWM_ch3,Power);
  analogWrite(PinPWM_ch4,Power); 
}
userHeadPic VanOosthuysen