/*############################################################################## Author: * Mirko Prosseda (01-2018) * email: mirko.prosseda@gmail.com * Description: * Dual DC Motor Driver 30V 4A V3 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 * IN1 -> 3 * IN2 -> 5 * IN3 -> 6 * IN4 -> 9 * GND -> GND ##############################################################################*/ // Define constants and variables const int Dir1a = 3; const int Dir1b = 5; const int Dir2a = 6; const int Dir2b = 9; const int analogPin1 = A0; const int analogPin2 = A1; int analogValue1; int analogValue2; byte pwmValue1; byte pwmValue2; // Initialization void setup() { pinMode(Dir1a, OUTPUT); pinMode(Dir1b, OUTPUT); pinMode(Dir2a, OUTPUT); pinMode(Dir2b, OUTPUT); digitalWrite(Dir1a, 0); digitalWrite(Dir1b, 0); digitalWrite(Dir2a, 0); digitalWrite(Dir2b, 0); } // main loop void loop() { // read both potentiometers values analogValue1 = analogRead(analogPin1); analogValue2 = analogRead(analogPin2); // apply direction adjustment for channel 1 if(analogValue1 > 512) { pwmValue1 = (analogValue1 - 512)/2; // evaluate new pwm value analogWrite(Dir1a,pwmValue1); digitalWrite(Dir1b, LOW); } else { pwmValue1 = (511 - analogValue1)/2; // evaluate new pwm value digitalWrite(Dir1a, LOW); analogWrite(Dir1b,pwmValue1); } // apply direction adjustment for channel 2 if(analogValue2 > 512) { pwmValue2 = (analogValue2 - 512)/2; // evaluate new pwm value analogWrite(Dir2a,pwmValue2); digitalWrite(Dir2b, LOW); } else { pwmValue2 = (511 - analogValue2)/2; // evaluate new pwm value digitalWrite(Dir2a, LOW); analogWrite(Dir2b,pwmValue2); } }