/*############################################################################## Author: * Mirko Prosseda (06-2013) * email: mirko.prosseda@gmail.com Description: * DC Dual Motor Driver 30V 4A V2 test sketch v1.0 * Speed and direction for each motor channel are regulated by * potentiometers attached to Arduino pins A0 and A1 Connections: * BOARD -> ARDUINO * 1A -> 2 * 1B -> 4 * E1 -> 3 * 2A -> 7 * 2B -> 8 * E2 -> 5 ##############################################################################*/ // Define constants and variables const int Dir1a = 2; const int Dir1b = 4; const int Enable1 = 3; const int Dir2a = 7; const int Dir2b = 8; const int Enable2 = 5; const int analogPin1 = A0; const int analogPin2 = A1; int analogValue1 = 0; int analogValue2 = 0; byte pwmValue1 = 0; byte pwmValue2 = 0; // Initialization void setup() { pinMode(Dir1a, OUTPUT); pinMode(Dir1b, OUTPUT); pinMode(Enable1, OUTPUT); pinMode(Dir2a, OUTPUT); pinMode(Dir2b, OUTPUT); pinMode(Enable2, OUTPUT); } // main loop void loop() { // read both potentiometers values analogValue1 = analogRead(analogPin1); analogValue2 = analogRead(analogPin2); // apply direction adjustment for channel 1 if(analogValue1 > 512) { digitalWrite(Dir1a, HIGH); digitalWrite(Dir1b, LOW); pwmValue1 = (analogValue1 - 512)/2; // evaluate new pwm value } else { digitalWrite(Dir1a, LOW); digitalWrite(Dir1b, HIGH); pwmValue1 = (511 - analogValue1)/2; // evaluate new pwm value } // apply direction adjustment for channel 2 if(analogValue2 > 512) { digitalWrite(Dir2a, HIGH); digitalWrite(Dir2b, LOW); pwmValue2 = (analogValue2 - 512)/2; // evaluate new pwm value } else { digitalWrite(Dir2a, LOW); digitalWrite(Dir2b, HIGH); pwmValue2 = (511 - analogValue2)/2; // evaluate new pwm value } // apply speed adjustment analogWrite(Enable1,pwmValue1); analogWrite(Enable2,pwmValue2); }