I'm trying to add a servo to an obstacle avoiding robot's ping sensor. The robot's ping sensor is attached to a servo which I want to rotate 180 degrees back and forth, all the while avoiding obstacles with pings. I pieced together a code to avoid obstacles (which works) but when I add in a code for the servo the robot does not function properly. I am relatively new to programming so any help for this beginner would be great!
Here is the code without my ping sensor servo attempt:
#include <Servo.h>
Servo myservo;
int pwm_speed = 255;
int trig = 12;
int echo = 13;
int pos= 0;
void setup() {
myservo.attach(2);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(3, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo,INPUT);
}
void loop(){
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(5);
digitalWrite(trig, LOW);
int duration = pulseIn(echo, HIGH);
int distance = duration / 29 / 2;
if(distance > 10){
forward(100);
}else if(distance < 10){
backward(1000);
left(1000);
}
}
void forward(int delay_time){
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(6, LOW);
analogWrite(5, pwm_speed);
analogWrite(3, pwm_speed);
delay(delay_time);
}
void backward(int delay_time){
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(6, HIGH);
analogWrite(5, pwm_speed);
analogWrite(3, pwm_speed);
delay(delay_time);
}
void left(int delay_time){
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(6, LOW);
analogWrite(5, 0);
analogWrite(3, pwm_speed);
delay(delay_time);
}
void motors_stop(int delay_time){
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9,LOW);
digitalWrite(6, LOW);
analogWrite(5, 0);
analogWrite(3, 0);
delay(delay_time);
}
And here is my unsuccessful attempt at adding the ping sensor servo:
#include <Servo.h>
Servo myservo;
int pwm_speed = 255;
int trig = 12;
int echo = 13;
int pos= 0;
void setup() {
myservo.attach(2);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(3, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo,INPUT);
}
void loop(){
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(5);
digitalWrite(trig, LOW);
int duration = pulseIn(echo, HIGH);
int distance = duration / 29 / 2;
if(distance > 10){
forward(100);
}else if(distance < 10){
backward(1000);
left(1000);
}
for (pos = 0; pos <= 180; pos += 1) {
myservo.write(pos);
delay(15);
}
for (pos = 180; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(15);
}
}
void forward(int delay_time){
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(6, LOW);
analogWrite(5, pwm_speed);
analogWrite(3, pwm_speed);
delay(delay_time);
}
void backward(int delay_time){
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(6, HIGH);
analogWrite(5, pwm_speed);
analogWrite(3, pwm_speed);
delay(delay_time);
}
void left(int delay_time){
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(6, LOW);
analogWrite(5, 0);
analogWrite(3, pwm_speed);
delay(delay_time);
}
void motors_stop(int delay_time){
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9,LOW);
digitalWrite(6, LOW);
analogWrite(5, 0);
analogWrite(3, 0);
delay(delay_time);
}