The only error I got when I merged the two and compiled for Arduino UNO was the place where "Motor_A_Enable" was mistyped as "Motor_A_Enablae".
#include <NewPing.h>
#include <PS3BT.h>
#include <usbhub.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>
int Motor_A_Enable = 9;
int Motor_A_Reverse = 4;
int Motor_A_Forward = 3;
int Motor_B_Enable = 10;
int Motor_B_Reverse = 7;
int Motor_B_Forward = 12;
void setup() {
setup1();
setup2();
}
void loop() {
loop1();
loop2();
}
void setup1() {
// put your setup code here, to run once:
Serial.begin(38400);
pinMode(Motor_A_Enable, OUTPUT);
pinMode(Motor_A_Forward, OUTPUT);
pinMode(Motor_A_Reverse, OUTPUT);
pinMode(Motor_B_Enable, OUTPUT);
pinMode(Motor_B_Forward, OUTPUT);
pinMode(Motor_B_Reverse, OUTPUT);
}
void loop1() {
if (Serial.available() > 0)
{
char data;
data = Serial.read();
Serial.write(Serial.read());
switch (data)
{
case '4': //FORWARD
//delay(1000);
digitalWrite(Motor_A_Reverse, LOW);
digitalWrite(Motor_B_Reverse, LOW);
digitalWrite(Motor_A_Forward, HIGH);
digitalWrite(Motor_B_Forward, HIGH);
for (int a = 0; a < 200; a++)
{
analogWrite(Motor_B_Enable, a);
analogWrite(Motor_A_Enable, a);
delay(5);
}
break;
case '5': //REVERSE
//delay(1000);
digitalWrite(Motor_A_Forward, LOW);
digitalWrite(Motor_B_Forward, LOW);
digitalWrite(Motor_A_Reverse, HIGH);
digitalWrite(Motor_B_Reverse, HIGH);
for (int a = 0; a < 200; a++)
{
analogWrite(Motor_B_Enable, a);
analogWrite(Motor_A_Enable, a);
delay(5);
}
break;
case '7': //FORWARD LEFT
for (int a = 0; a < 255; a++)
{
analogWrite(Motor_A_Enable, a);
//analogWrite(Motor_B_Enable, a);
delay(5);
}
// analogWrite(Motor_A_Enable, 230);
//analogWrite(Motor_B_Enable, 255);
digitalWrite(Motor_A_Forward, HIGH);
// digitalWrite(Motor_B_Reverse, HIGH);
digitalWrite(Motor_A_Reverse, LOW);
// digitalWrite(Motor_B_Forward, LOW);
break;
case '6': //FORWARD RIGHT
for (int a = 0; a < 255; a++)
{
//analogWrite(Motor_A_Enable, a);
analogWrite(Motor_B_Enable, a);
delay(5);
}
// analogWrite(Motor_A_Enable, 250);
analogWrite(Motor_B_Enable, 230);
// digitalWrite(Motor_A_Reverse, HIGH);
digitalWrite(Motor_B_Forward, HIGH);
// digitalWrite(Motor_A_Forward, LOW);
digitalWrite(Motor_B_Reverse, LOW);
break;
default: //If bluetooth module receives any value not listed above, both motors turn off
analogWrite(Motor_A_Enable, 0);
analogWrite(Motor_B_Enable, 0);
}
}
}
#define trig_pin A1 //analog input 1
#define echo_pin A2 //analog input 2
#define maximum_distance 200
boolean goesForward = false;
int distance = 100;
NewPing sonar(trig_pin, echo_pin, maximum_distance); //sensor function
USB Usb;
BTD Btd(&Usb);
//PS3BT PS3(&Btd);
PS3BT PS3(&Btd); // This will just create the instance
//PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch
int const PWMA = 3;
int const PWMB = 5;
int const dirA = 2;
int const dirB = 4;
void _mForward()
{
digitalWrite(dirA, 255);
analogWrite(PWMA, HIGH);
digitalWrite(dirB, 255);
analogWrite(PWMB, HIGH);
}
void _mBack()
{
digitalWrite(dirA, LOW);
analogWrite(PWMA, 255);
digitalWrite(dirB, LOW);
analogWrite(PWMB, 255);;
}
void _mleft()
{
digitalWrite(dirA, LOW);
analogWrite(PWMA, 255);
digitalWrite(dirB, HIGH);
analogWrite(PWMB, 255);
}
void _mright()
{
digitalWrite(dirA, HIGH);
analogWrite(PWMA, 255);
digitalWrite(dirB, LOW);
analogWrite(PWMB, 255);
}
void _mStop()
{
digitalWrite(dirA, 0);
analogWrite(PWMA, 0);
digitalWrite(dirB, 0);
analogWrite(PWMB, 0);
}
void setup2() {
Serial.begin(9600);
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while (1); //halt
}
Serial.print(F("\r\nPS3 Bluetooth Library Started"));
pinMode(PWMA, OUTPUT);
pinMode(PWMB, OUTPUT);
pinMode(dirA, OUTPUT);
pinMode(dirB, OUTPUT);
distance = readPing();
}
void loop2() {
Usb.Task();
int distanceRight = 0;
int distanceLeft = 0;
if (PS3.PS3Connected || PS3.PS3NavigationConnected) {
if (distance <= 20) {
_mStop();
delay(300);
_mForward();
delay(400);
_mStop();
delay(300);
}
else {
if (PS3.getButtonPress(RIGHT))
{
_mright();
}
else if (PS3.getButtonPress(LEFT)) {
_mleft();
}
else if (PS3.getButtonPress(CROSS))
{
_mForward();
}
else if (PS3.getButtonPress(TRIANGLE))
{
_mBack();
}
else {
_mStop();
}
}
}
distance = readPing();
}
int readPing() {
delay(0);
int cm = sonar.ping_cm();
if (cm == 0) {
cm = 250;
}
return cm;
}