Combining Projects 5 and 10

Hi all,

I’m attempting to combine projects 5 and 10 to make a remote control car. I have essentially combined the two programming scripts by changing the pin assignments, but when after I load it, the servo works but the petentiometer controlling the motor speed just does an on/off control, not a variable speed. Any notions?


Arduino Starter Kit example
Project 10 - Zoetrope

This sketch is written to accompany Project 10 in the
Arduino Starter Kit

Parts required:
two 10 kilohm resistors
2 momentary pushbuttons
one 10 kilohm potentiometer
9V battery

Created 13 September 2012
by Scott Fitzgerald
Thanks to Federico Vanzati for improvements

This example code is part of the public domain
// include the servo library
#include <Servo.h>

Servo myServo; // create a servo object

const int controlPin1 = 2; // connected to pin 7 on the H-bridge
const int controlPin2 = 3; // connected to pin 2 on the H-bridge
const int enablePin = 9; // connected to pin 1 on the H-bridge
const int directionSwitchPin = 4; // connected to the switch for direction
const int onOffSwitchStateSwitchPin = 5; // connected to the switch for turning the motor on and off
const int potPin = A0; // connected to the potentiometer’s output

// create some variables to hold values from your inputs
int onOffSwitchState = 0; // current state of the On/Off switch
int previousOnOffSwitchState = 0; // previous position of the on/off switch
int directionSwitchState = 0; // current state of the direction switch
int previousDirectionSwitchState = 0; // previous state of the direction switch

int motorEnabled = 0; // Turns the motor on/off
int motorSpeed = 0; // speed of the motor
int motorDirection = 1; // current direction of the motor

int const potPin2 = A1; // analog pin used to connect the potentiometer
int potVal; // variable to read the value from the analog pin
int angle; // variable to hold the angle for the servo motor

void setup() {
// intialize the inputs and outputs
pinMode(directionSwitchPin, INPUT);
pinMode(onOffSwitchStateSwitchPin, INPUT);
pinMode(controlPin1, OUTPUT);
pinMode(controlPin2, OUTPUT);
pinMode(enablePin, OUTPUT);

myServo.attach(10); // attaches the servo on pin 10 to the servo object
Serial.begin(9600); // open a serial connection to your computer

// pull the enable pin LOW to start
digitalWrite(enablePin, LOW);

void loop() {
// read the value of the on/off switch
onOffSwitchState = digitalRead(onOffSwitchStateSwitchPin);

// read the value of the direction switch
directionSwitchState = digitalRead(directionSwitchPin);

// read the value of the pot and divide by 4 to get
// a value that can be used for PWM
motorSpeed = analogRead(potPin) / 4;

// if the on/off button changed state since the last loop()
if (onOffSwitchState != previousOnOffSwitchState) {
// change the value of motorEnabled if pressed
if (onOffSwitchState == HIGH) {
motorEnabled = !motorEnabled;

// if the direction button changed state since the last loop()
if (directionSwitchState != previousDirectionSwitchState) {
// change the value of motorDirection if pressed
if (directionSwitchState == HIGH) {
motorDirection = !motorDirection;

// change the direction the motor spins by talking
// to the control pins on the H-Bridge
if (motorDirection == 1) {
digitalWrite(controlPin1, HIGH);
digitalWrite(controlPin2, LOW);
} else {
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, HIGH);

// if the motor is supposed to be on
if (motorEnabled == 1) {
// PWM the enable pin to vary the speed
analogWrite(enablePin, motorSpeed);
} else { // if the motor is not supposed to be on
//turn the motor off
analogWrite(enablePin, 0);
// save the current On/Offswitch state as the previous
previousDirectionSwitchState = directionSwitchState;
// save the current switch state as the previous
previousOnOffSwitchState = onOffSwitchState;

potVal = analogRead(potPin2); // read the value of the potentiometer
// print out the value to the serial monitor
Serial.print("potVal: ");

// scale the numbers from the pot
angle = map(potVal, 0, 1023, 0, 179);

// print out the angle for the servo motor
Serial.print(", angle: ");

// set the servo position

// wait for the servo to get there