Here is my code:
int pwm_a = 3; //PWM control for motor outputs 1 and 2 is on digital pin 3
int pwm_b = 11; //PWM control for motor outputs 3 and 4 is on digital pin 11
int dir_a = 12; //direction control for motor outputs 1 and 2 is on digital pin 12
int dir_b = 13; //direction control for motor outputs 3 and 4 is on digital pin 13
int forward = 4;
int backward = 5;
int left = 6;
int right = 7;
int f_val, b_val, l_val, r_val = 0;
int fast = 255; // motor speed 100%
int med = 175; // motor speed 75%
int slow = 100; // motor speed 39%
int stopped = 0; // motor stopped 0%
void moveForward(int speed)
{
analogWrite(pwm_a, speed); // set motor speed
analogWrite(pwm_b, speed); // set motor speed
digitalWrite(dir_a, HIGH); //Set motor direction, 1 low, 2 high
digitalWrite(dir_b, LOW); //Set motor direction, 3 high, 4 low
}
void moveBackward(int speed)
{
analogWrite(pwm_a, speed); // set motor speed
analogWrite(pwm_b, speed); // set motor speed
digitalWrite(dir_a, LOW); //Set motor direction, 1 low, 2 high
digitalWrite(dir_b, HIGH); //Set motor direction, 3 high, 4 low
}
void turnRight(int speed)
{
analogWrite(pwm_a, speed); // set motor speed
analogWrite(pwm_b, speed); // set motor speed
digitalWrite(dir_a, HIGH); //Set motor direction, 1 low, 2 high
digitalWrite(dir_b, HIGH); //Set motor direction, 3 high, 4 low
}
void turnLeft(int speed)
{
analogWrite(pwm_a, speed); // set motor speed
analogWrite(pwm_b, speed); // set motor speed
digitalWrite(dir_a, LOW); //Set motor direction, 1 low, 2 high
digitalWrite(dir_b, LOW); //Set motor direction, 3 high, 4 low
}
void stopRobot()
{
analogWrite(pwm_a, stopped); // set motor speed
analogWrite(pwm_b, stopped); // set motor speed
}
void setup()
{
Serial.begin(9600);
//Set control pins to be outputs
pinMode(pwm_a, OUTPUT);
pinMode(pwm_b, OUTPUT);
pinMode(dir_a, OUTPUT);
pinMode(dir_b, OUTPUT);
pinMode(forward, INPUT);
pinMode(backward, INPUT);
pinMode(left, INPUT);
pinMode(right, INPUT);
stopRobot();
}
void loop()
{
f_val = digitalRead(forward);
b_val = digitalRead(backward);
l_val = digitalRead(left);
r_val = digitalRead(right);
if (f_val == HIGH)
{
moveForward(slow);
}
if (b_val == HIGH)
{
moveBackward(slow);
}
if (l_val == HIGH)
{
turnLeft(slow);
}
if (r_val == HIGH)
{
turnRight(slow);
}
}
As I mentioned before, i'm using
http://code.google.com/p/webiopi/ to switch the GPIO (output) pins of my Raspberry on and off which active the INPUT pins on my Arduino.
My Raspberry is currently powered using a 2A 5v USB supply and my Arduino is powered seperately through my motor sheild with 8 AA batteries.
Thanks, Jason.