/*
 * Arduino code for SN754410 H-bridge 
 * motor driver control. 
 * copyleft Feb. 2010, Fabian Winkler
 * Documentation: 
 * http://web.ics.purdue.edu/~fwinkler/616/sn754410_Arduino.pdf
 * 
 */
int speedPin = 3;         // H-bridge enable pin for speed control
int motor1APin = 6;       // H-bridge leg 1 
int motor2APin = 7;       // H-bridge leg 2 
int ledPin = 13;          // status LED
int speed_value_motor1;   // value for motor speed

void setup() {
  // set digital i/o pins as outputs:
  pinMode(speedPin, OUTPUT);
  pinMode(motor1APin, OUTPUT); 
  pinMode(motor2APin, OUTPUT); 
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);  // status LED is on
  
     // put motor in forward motion
  digitalWrite(motor1APin, LOW);   // set leg 1 of the H-bridge low
  digitalWrite(motor2APin, HIGH);  // set leg 2 of the H-bridge high
    // just invert the above values for reverse motion,
    // i.e. motor1APin = HIGH and motor2APin = LOW 

    
    // control the speed 0-255
    speed_value_motor1 = 127; // half speed  (No slower for gearheads)
    analogWrite(speedPin, speed_value_motor1);  // output speed as PWM value
    delay(3000);
    speed_value_motor1 = 255; // full speed
    analogWrite(speedPin, speed_value_motor1);  // output speed as PWM value
    delay(2000);

    // Stop
  digitalWrite(ledPin, LOW);  // status LED is off
  digitalWrite(motor1APin, HIGH);   // set leg 1 of the H-bridge low
  digitalWrite(motor2APin, HIGH);  // set leg 2 of the H-bridge high
  delay(2000);

    // Reverse
  digitalWrite(ledPin, HIGH);  // status LED is on
  digitalWrite(motor1APin, HIGH);   // set leg 1 of the H-bridge low
  digitalWrite(motor2APin, LOW);  // set leg 2 of the H-bridge high
  delay(2000);
      // Stop
  digitalWrite(ledPin, LOW);  // status LED is off
  digitalWrite(motor1APin, HIGH);   // set leg 1 of the H-bridge low
  digitalWrite(motor2APin, HIGH);  // set leg 2 of the H-bridge high
  delay(500);
  
}