Code from Reply #6 so others don't have to download it.
#include <Ultrasonic.h>
Ultrasonic ultraleft(6,5); // (Trig PIN,Echo PIN)
Ultrasonic ultraright(2,4); // (Trig PIN,Echo PIN)
Ultrasonic ultracenter(7,10); // (Trig PIN,Echo PIN)
int SL; //speed value Left motor
int SR; // speed value Right motor
int UC; // Center sensor
int UL; // Left sensor
int UR; // Right sensor
int SpeedArray[17] = {90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250}; // Speed Array
char state = 'S'; //Bluetooth (HC-06)
void setup() {
Serial.begin(9600);
//Setup Channel A
pinMode(12, OUTPUT); //Initiates Motor Channel A pin
pinMode(9, OUTPUT); //Initiates Brake Channel A pin
//Setup Channel B
pinMode(13, OUTPUT); //Initiates Motor Channel B pin
pinMode(8, OUTPUT); //Initiates Brake Channel B pin
ResetSystem ();
}
void loop() {
if(Serial.available() > 0){
SL=255;
SR=255;
state = Serial.read();
switch(state){
case 'F':
Forward ();
break;
case 'B':
Backward();
break;
case 'L':
Left();
break;
case 'R':
Right();
break;
case 'S':
Stop();
break;
case 'I': //FR
FrontRight ();
break;
case 'J': //BR
BackRight ();
break;
case 'G': //FL
FrontLeft ();
break;
case 'H': //BL
BackLeft ();
break;
case 'W': //Font ON
break;
case 'w': //Font OFF
break;
case 'U': //Back ON
break;
case 'u': //Back OFF
break;
case 'D': //Everything OFF
Stop();
break;
}
}else {
ReadSensor ();
AvoidWalls ();
MoveRobot ();
}
}
void ResetSystem (){
digitalWrite(9, HIGH);
analogWrite(3, 0);
digitalWrite(8, HIGH);
analogWrite(11, 0);
delay(2000);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
void ReadSensor (){
UL=ultraleft.Ranging(CM);
delay(50);
UC=ultracenter.Ranging(CM);
delay(50);
UR=ultraright.Ranging(CM);
delay(50);
}
void AvoidWalls (){
if (UC<15 and UR<17 and UL<17){
digitalWrite(13, LOW);
digitalWrite(12, LOW);
SL=255;
SR=255;
}
else if (UC<15){
if (UR>UL) {
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
SL=255;
SR=255;
}else{
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
SL=255;
SR=255;
}
}
else if (UC>14) {
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
if (UL<16 or UR<16){
if (UL<16 and UR>16){
SL=255;
SR=SpeedArray[UL];
} else if (UR<16 and UL>16){
SL=SpeedArray[UR];
SR=255;
}else{
SL=SpeedArray[UR];
SR=SpeedArray[UL];
}
}
else {
SL=255;
SR=255;
}
}
void MoveRobot (){
analogWrite(3, SR);
analogWrite(11, SL);
}
void Forward () {
digitalWrite(12, HIGH);
digitalWrite(9, LOW);
analogWrite(3, SR);
digitalWrite(13, HIGH);
digitalWrite(8, LOW);
analogWrite(11, SL);
}
void Backward () {
digitalWrite(12, LOW);
digitalWrite(9, LOW);
analogWrite(3, SR);
digitalWrite(13, LOW);
digitalWrite(8, LOW);
analogWrite(11, SL);
}
void Left (){
digitalWrite(12, HIGH);
digitalWrite(9, LOW);
analogWrite(3, SR);
digitalWrite(13, LOW);
digitalWrite(8, LOW);
analogWrite(11, SL);
}
void Right () {
digitalWrite(12, LOW);
digitalWrite(9, LOW);
analogWrite(3, SR);
digitalWrite(13, HIGH);
digitalWrite(8, LOW);
analogWrite(11, SL);
}
void Stop (){
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
}
void FrontRight () {
SR=SR/2;
digitalWrite(12, HIGH);
digitalWrite(9, LOW);
analogWrite(3, SR);
digitalWrite(13, HIGH);
digitalWrite(8, LOW);
analogWrite(11, SL);
}
void FrontLeft (){
SL=SL/2;
digitalWrite(12, HIGH);
digitalWrite(9, LOW);
analogWrite(3, SR);
digitalWrite(13, HIGH);
digitalWrite(8, LOW);
analogWrite(11, SL);
}
void BackRight (){
SR=SR/2;
digitalWrite(12, LOW);
digitalWrite(9, LOW);
analogWrite(3, SR);
digitalWrite(13, LOW);
digitalWrite(8, LOW);
analogWrite(11, SL);
}
void BackLeft (){
SL=SL/2;
digitalWrite(12, LOW);
digitalWrite(9, LOW);
analogWrite(3, SR);
digitalWrite(13, LOW);
digitalWrite(8, LOW);
analogWrite(11, SL);
}
...R