I am using the arduino rover chassis kit from RobotShop (only the frame and motors and treads, no extra stuff).
I am driving the dc motors with an H bridge and a 6 volt power supply. Also, I have an ultrsonic sensor mounted on a small servo, a Hitec HS-55. I have the servo moving between 3 different positions while the motors are running. But when I apply any torque to the wheels, the servo goes wacky.
Here's the code:
#include <Servo.h>
int en1 = 5;
int en2 = 9;
int s1log1 = 3;
int s1log2 = 4;
int s2log1 = 7;
int s2log2 = 8;
int piezo = 6;
int sonar = 1;
int reading1;
int reading2;
int reading3;
void gofwd() {
digitalWrite(s1log2, LOW);
digitalWrite(s1log1,HIGH);
digitalWrite(s2log2, LOW);
digitalWrite(s2log1,HIGH);
digitalWrite(en1, HIGH);
digitalWrite(en2, HIGH);
}
void stop() {
digitalWrite(en1, LOW);
digitalWrite(en2, LOW);
}
void turnleft(int ratio) {
digitalWrite(s1log2, LOW);
digitalWrite(s1log1,HIGH);
digitalWrite(s2log1, LOW);
digitalWrite(s2log2,HIGH);
digitalWrite(en2, HIGH);
analogWrite(en1, ratio);
}
void turnright(int ratio) {
digitalWrite(s1log1, LOW);
digitalWrite(s1log2,HIGH);
digitalWrite(s2log2, LOW);
digitalWrite(s2log1,HIGH);
digitalWrite(en1, HIGH);
digitalWrite(en2, ratio);
}
void goback() {
digitalWrite(s1log1, LOW);
digitalWrite(s1log2,HIGH);
digitalWrite(s2log1, LOW);
digitalWrite(s2log2,HIGH);
digitalWrite(en1, HIGH);
analogWrite(en2, HIGH);
}
Servo neck;
void setup() {
pinMode(en1, OUTPUT);
pinMode(en2, OUTPUT);
pinMode(s1log1, OUTPUT);
pinMode(s1log2, OUTPUT);
pinMode(s2log1, OUTPUT);
pinMode(s2log2, OUTPUT);
pinMode(piezo, OUTPUT);
neck.attach(10);
}
void loop() {
gofwd();
neck.write(10);
delay(1000);
reading1 = analogRead(sonar);
neck.write(100);
delay(1000);
reading2 = analogRead(sonar);
neck.write(180);
delay(1000);
reading3 = analogRead(sonar);
}
I am using 0017 so I have the newer servo library.