General

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

userHead VanOosthuysen 2014-03-15 16:26:30 4458 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 14: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