Heya. I am working on an autonomous car using a Ping sensor and a Seeed Motor controller shield and having issues with the speed controller pins. The speed control runs off pins 9 and 10 per the below sketch, but those pins are disabled when using the Servo library. So I basically need to reassign the pins that are being used by the servo library. Can anybody help me out?
------ CODE -------
#include <Ping.h>
#include <Servo.h>
int pos = 78; // variable to store the servo position
int offset = 55;
Ping ping = Ping(7,0,0);
int distance=0;
int distRight=0;
int distLeft=0;
int distBack=0;
int distCenter=0;
int pinI1=8;//define I1 interface
int pinI2=11;//define I2 interface
int speedpinA=9;//enable motor A - THIS BREAKS
int pinI3=12;//define I3 interface
int pinI4=13;//define I4 interface
int speedpinB=10;//enable motor B - THIS BREAKS
int spead =100;//define the spead of motor
int spead2 =200;//define the spead of motor
int spead3 =150;//define the spead of motor
void setup()
{
delay(4000);
neck.attach(6); // THIS IS THE KILLER
delay(1000);
neck.write(pos); // tell servo to go to position in variable 'pos'
delay(2000);
Serial.begin(115200);
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);
pinMode(speedpinA,OUTPUT);
pinMode(pinI3,OUTPUT);
pinMode(pinI4,OUTPUT);
pinMode(speedpinB,OUTPUT);
//test();
//delay(4000);
}
void test(){
forward();
Serial.println("forward");
delay(2000);
backward();
Serial.println("backward");
delay(2000);
left();
Serial.println("left");
delay(2000);
right();
Serial.println("right");
delay(2000);
}
void pingFire(){
ping.fire();
Serial.print("Microseconds: ");
Serial.print(ping.microseconds());
Serial.print(" | Inches ");
Serial.print(ping.inches());
Serial.print(" | Centimeters: ");
Serial.print(ping.centimeters());
Serial.println();
distance = ping.centimeters();
delay(20);
}
//I1 = right forward
//I4 = left forward
//I3 = left backward
//I2 = right backward
void forward()
{
analogWrite(speedpinA,spead);//input a simulation value to set the speed
analogWrite(speedpinB,spead);
digitalWrite(pinI4,HIGH);//turn DC Motor B move clockwise
digitalWrite(pinI3,LOW);
digitalWrite(pinI2,LOW);//turn DC Motor A move anticlockwise
digitalWrite(pinI1,HIGH);
}
void backward()//
{
analogWrite(speedpinA,spead);//input a simulation value to set the speed
analogWrite(speedpinB,spead);
digitalWrite(pinI4,LOW);//turn DC Motor B move anticlockwise
digitalWrite(pinI3,HIGH);
digitalWrite(pinI2,HIGH);//turn DC Motor A move clockwise
digitalWrite(pinI1,LOW);
}
void left()//
{
analogWrite(speedpinA,spead3);//input a simulation value to set the speed, back
analogWrite(speedpinB,spead2);
digitalWrite(pinI4,HIGH);//turn DC Motor B move clockwise
digitalWrite(pinI3,LOW);
digitalWrite(pinI2,HIGH);//turn DC Motor A move clockwise
// digitalWrite(pinI2,LOW);//neutral motor
digitalWrite(pinI1,LOW);
}
void right()//
{
analogWrite(speedpinA,spead3);//input a simulation value to set the speed
analogWrite(speedpinB,spead2);
digitalWrite(pinI4,LOW);//turn DC Motor B move anticlockwise
digitalWrite(pinI3,HIGH);
// digitalWrite(pinI3,LOW);
digitalWrite(pinI2,LOW);//turn DC Motor A move clockwise
digitalWrite(pinI1,HIGH);
}
void coast()
{
digitalWrite(speedpinA,LOW);// Unenble the pin, to stop the motor. this should be done to avid damaging the motor.
digitalWrite(speedpinB,LOW);
delay(1000);
}
//void stop()//
//{
// analogWrite(speedpinA,spead);//input a simulation value to set the speed
// analogWrite(speedpinB,spead);
// digitalWrite(pinI4,LOW);//turn DC Motor B move anticlockwise
// digitalWrite(pinI3,HIGH);
// digitalWrite(pinI2,HIGH);//turn DC Motor A move clockwise
// digitalWrite(pinI1,LOW);
// delay(400);
//}
void stop()//
{
digitalWrite(speedpinA,LOW);// Unenble the pin, to stop the motor. this should be done to avid damaging the motor.
digitalWrite(speedpinB,LOW);
delay(1000);
}
//void sweep()
//{ // in steps of 1 degree
// myservo.write(pos + offset); // tell servo to go to position in variable 'pos'
// delay(500);
// pingFire();
// Serial.print("Left = ");
// Serial.println(distance);
// distLeft = distance;
// delay(500);
////
// myservo.write(pos - offset);
// delay(800);
// pingFire();
// Serial.print("Right = ");
// Serial.println(distance);
// distRight = distance;
// delay(500);
////
// myservo.write(pos);
// delay(500);
// pingFire();
// Serial.print("Center = ");
// Serial.println(distance);
// distCenter = distance;
// delay(500);
//}
//void backup()
//{
// myservo.write(pos + 89);
// delay(1200);
// pingFire();
// Serial.print("Reverse = ");
// Serial.println(distance);
// delay(200);
// while (distance > 150) {
// backward();
// delay(500);
// }
//}
//void chooseDir()
//{
// sweep();
// if ((distLeft < distRight) && distLeft >150) {
// left();
// } else if ((distLeft < distRight) && distLeft >150) {
// right();
// }
// else {
// backward();
// }
//}
void loop()
{
left();
delay(2000);
stop();
right();
delay(2000);
stop();
// delay(2000);
forward();
delay(2000);
stop();
backward();
delay(2000);
stop();
}