搜索代码

Complete Guide to the DFRobot Motor Shield L298N for Arduino Uno

Complete Guide to the DFRobot Motor Shield L298N for Arduino Uno

This video shows you how to use the DFRobot Motor Shield for Arduino UNO to control two DC motors. This code has two extra functions, moveMotor() and brake(), which makes controlling the motors very easy and requires a minimum amount of code lines.

153-Basic code to control two DC motors using a DFRobot Motor Shield
语言: C++
++
/*
 * Code to control 2 DC motors using DFRobot Arduino Motor Shield (Basic Code)
 * Written by Ahmad Shamshiri for Robojax.com on September 2, 2018 at 9:57 in Ajax, Ontario, Canada
 * Watch video instruction for this code:https://youtu.be/N71djcUZKk0
 * 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 * 
 */
const int MotorPinA = 4; // direction motor 1 (Channel A)
const int MotorSpeedPinA = 5; // for motor 1 (channel A)



const int MotorPinB = 7; // direction motor 2 (Channel B)
const int MotorSpeedPinB = 6;// for motor 2 (channel B)


const int CW  = HIGH;
const int CCW = LOW;

void setup() {
  // motor A pin assignment
  pinMode(MotorPinA, OUTPUT);
  pinMode(MotorSpeedPinA, OUTPUT);


  // motor B pin assignment
  pinMode(MotorPinB, OUTPUT);
  pinMode(MotorSpeedPinB, OUTPUT);

  Serial.begin(9600);//  serial monitor initialized 

}

void loop() {


  digitalWrite(MotorPinB, CW);// set direction
      Serial.print("Direction CW - B"); 
  analogWrite(MotorSpeedPinB, 87);// set speed at maximum
      Serial.println(" 87");

 digitalWrite(MotorPinA, CCW);// set direction
      Serial.print("Direction CCW - A"); 
  analogWrite(MotorSpeedPinA, 110);// set speed at maximum
      Serial.println(" 110");
            
  delay(5000);// run for 5 seconds
  analogWrite(MotorSpeedPinB, 0);// stop motor B
        Serial.println("Stop motor B");
  delay(2000);
  
 digitalWrite(MotorPinB, CCW);// set direction 
      Serial.print("Direction CCW - B ");
  analogWrite(MotorSpeedPinB, 160);// set speed at maximum
      Serial.println("160");         
  delay(5000);// run for 5 seconds

  analogWrite(MotorSpeedPinA, 0);// stop motor A
        Serial.println("Stop motor A");

  delay(2000);


  digitalWrite(MotorPinA, CW);// set direction
      Serial.print("Direction CW - A "); 
  analogWrite(MotorSpeedPinA, 189);// set speed at maximum
      Serial.println("189");  
 delay(3000);
  

Serial.println("===== loop "); 

}// loop end
154-Advanced code for a DFRobot motor shield to control two DC motors
语言: C++
++
/*
 * Code to control 2 DC motors using DFRobot Arduino Motor Shield (Advanced Code)
 * This code has two extra functions, moveMotor() and brake(), which makes controlling the motors very easy and with a minimum amount of code lines.
 * Written by Ahmad Shamshiri for Robojax.com on September 2, 2018, at 09:57 in Ajax, Ontario, Canada
 * Watch video instruction for this code:https://youtu.be/N71djcUZKk0
 * 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 * 
 */
const int MotorPinA = 4; // direction motor 1 (Channel A)
const int MotorSpeedPinA = 5; // for motor 1 (channel A)



const int MotorPinB = 7; // direction motor 2 (Channel B)
const int MotorSpeedPinB = 6;// for motor 2 (channel B)


const int CW  = HIGH;
const int CCW = LOW;

void setup() {
  // motor A pin assignment
  pinMode(MotorPinA, OUTPUT);
  pinMode(MotorSpeedPinA, OUTPUT);


  // motor B pin assignment
  pinMode(MotorPinB, OUTPUT);
  pinMode(MotorSpeedPinB, OUTPUT);

  Serial.begin(9600);//  serial monitor initialized 

}

void loop() {


  moveMotor('B', CCW, 120); 
      Serial.print("Motor B CCW "); 
      Serial.println(" 120");
 delay(3000);
 brake('B');// stops motor B
    Serial.println("Motor B Stopped ");
 delay(2000);
  moveMotor('B', CW, 255); 
      Serial.print("Motor B CW "); 
      Serial.println(" 255"); 
 delay(4000);
  

Serial.println("===== loop "); 

}// loop end


/*
 * 
 * Written by Ahmad Shamshiri August 29, 2018, at 20:59 in Ajax, Ontario, Canada 
 * moveMotor controls the motor
  @param motor is char A or B referring to motor A or B.
  @param dir is motor direction, CW or CCW
  @param speed is PWM value between 0 to 255

  Example 1: to start moving motor A in CW direction with 135 PWM value
  moveMotor('A', CW, 135);

  Example 2: to start moving motor B in CCW direction with 200 PWM value
  moveMotor('B', CCW, 200);  
 */

void moveMotor(char motor, int dir, int speed)
{
  int motorPin;
  int motorSpeedPin;
  
  if(motor =='A')
  {
    motorPin      = MotorPinA;
    motorSpeedPin = MotorSpeedPinA;  
  }else{
    motorPin      = MotorPinB;
    motorSpeedPin = MotorSpeedPinB;     
  }
   digitalWrite(motorPin, dir);// set direction for motor
   analogWrite(motorSpeedPin, speed);// set speed of motor   
}//moveMotor end

/*
 * This function is to be used with DFRobot Motor Shield.
 * brake stops the motor.
 * @param motor is character A or B
 * example of usage:
 * brake('A');// stops motor A
 * brake('B');// stops motor B
 */
void brake(char motor)
{
  if(motor =='A')
  {
    digitalWrite(MotorSpeedPinA, 0);// stop motor A
    delay(1000);
  }else{
    digitalWrite(MotorSpeedPinB, 0);// stop motor B
    delay(1000);
   
  }
}// brake end

文件📁

没有可用的文件。