DC Motor Control

This program controls a DC motor attached to the microcontroller via a transistor or relay. Adaptation to make the motor speed change by Ryan Holsopple.

A simple version is at the bottom of the page

  DC motor control
  by Ryan Holsopple
  modification of Tom Igoe's DC motor code   
  I added function to start motor turning in one direction
  I raised the threshold for my pot to work
  Created 8 Feb. 2006


int sensorValue = 0;     // the variable to hold the analog sensor value
int sensorPin = 0;       // the analog pin with the sensor on it
int motorPin = 9;        // the digital pin with the motor on it
int threshold = 300;     // the theshold of the analog sensor below which the motor should turn on
int forwardPin = 7;
int backwardPin = 8;

// prototype of the function that changes the motor's speed:
void changeMotorSpeed();

//function to begin motor turning in one direction
void forwardDirection();

void setup() {
 // declare the inputs and outputs:
 pinMode(motorPin, OUTPUT);
 pinMode(forwardPin, OUTPUT);
 pinMode(backwardPin, OUTPUT);
 pinMode(sensorPin, INPUT);

void loop() {
  //  read the analog sensor
  sensorValue = analogRead(sensorPin);
  //  determine whether its above or below the threshold
  if (sensorValue > threshold) {    // it's above the threshold
    // turn off the motor
    digitalWrite(motorPin, LOW);
  else {
    //start motor turning forward
    // change the speed of the motor based on the sensor value:

void forwardDirection(){
  digitalWrite (forwardPin, HIGH);
  digitalWrite (backwardPin, LOW);
void changeMotorSpeed() {
  analogWrite(motorPin, sensorValue);

The simple version:

int motorPin = 9;  // where the transistor's base is attached
int analogPin = 0;  // Analog input number for the potentiometer

int analogValue = 0;  // variable for the analog reading

void setup()  {
pinMode(motorPin, OUTPUT);


void loop() {
  analogValue = analogRead(analogPin);
  if (analogValue > 512) {
  // turn the motor on
  digitalWrite(motorPin, HIGH);
  } else {
  // turn the motor off
  digitalWrite(motorPin, LOW);