Код для поиска

Lesson 54-2: Controlling Two DC Motors Using a Potentiometer and Push Buttons

Lesson 54-2: Controlling Two DC Motors Using a Potentiometer and Push Buttons

488-Lesson 54: Controlling a DC motor using a potentiometer and push buttons
Язык: C++
++
/*
 *   Lesson 54: Controlling DC motor using Potentiometer and push buttons| Arduino Step By Step Course
 * Library Example for L298N Module to control DC 2 motors with 3 push buttons
 * Watch video instruction for this code: https://youtu.be/_o7hCxYKLyc
 * This code is to control DC motors using two potentiometers (variable resistors)
 * Written by Ahmad Shamshiri on October 11, 2019
 * in Ajax, Ontario, Canada. www.robojax.com
 * 
 * Get this code and other Arduino codes from Robojax.com
 * Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
 * all in one place. Purchase My course on Udemy.com http://robojax.com/L/?id=62
 * If you found this tutorial helpful, please support me so I can continue creating
 * content like this. 
 * or make a donation using PayPal http://robojax.com/L/?id=64
 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
 * 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/>.
 */

#include <Robojax_L298N_DC_motor.h>
// motor 1 settings
#define IN1 2
#define IN2 4
#define ENA 3 // this pin must be PWM enabled pin

// motor 2 settings
#define IN3 6
#define IN4 7
#define ENB 5 // this pin must be PWM enabled pin

const int CCW = 2; // do not change
const int CW  = 1; // do not change

#define motor1 1 // do not change
#define motor2 2 // do not change

//*** Potentiometer and push button for motor 1 started 

const int motor1PushButtonCW = 8;
const int motor1PushButtonStop = 9;
const int motor1PushButtonCCW = 10;
const int pot1Input = A0;
const int motor1Minimum =15;//30% is minimum for motor 1

// do not change below this line
int motor1Direction =CCW;//
int motor1StopState=HIGH;//Stope state of motor 1
int motor1Speed =0;// speed of motor 1
//*** Potentiometer and push button for motor 1 ended
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

//*** Potentiometer and push button for motor 2 started 

const int motor2PushButtonCW = 11;
const int motor2PushButtonStop = 12;
const int motor2PushButtonCCW = 13;
const int pot2Input = A1;
const int motor2Minimum =15;//30% is minimum for motor 2

// do not change below this line
int motor2Direction =CCW;//
int motor2StopState=HIGH;//Stope state of motor 2
int motor2Speed =0;// speed of motor 2
//*** Potentiometer and push button for motor 2 ended
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


// use the line below for single motor
//Robojax_L298N_DC_motor motor(IN1, IN2, ENA, true);

// use the line below for two motors
Robojax_L298N_DC_motor motor(IN1, IN2, ENA, IN3, IN4, ENB, true);

void setup() {
  Serial.begin(115200);
  motor.begin();

  //L298N DC Motor by Robojax.com
  //push buttons for motor 1
  pinMode(motor1PushButtonCW, INPUT_PULLUP);
  pinMode(motor1PushButtonStop, INPUT_PULLUP);
  pinMode(motor1PushButtonCCW, INPUT_PULLUP); 

  //push buttons for motor 2
  pinMode(motor2PushButtonCW, INPUT_PULLUP);
  pinMode(motor2PushButtonStop, INPUT_PULLUP);
  pinMode(motor2PushButtonCCW, INPUT_PULLUP);   
}


void loop() {
  updateState1();//read all push buttons for motor1
  int pot1Value= analogRead(pot1Input);// read potentiometer value
  motor1Speed = map(pot1Value, 0,1023, motor1Minimum, 100);// convert 0-5V to 0-100%

  if(motor1StopState ==HIGH)
  {
    motor.brake(1);  
    
  }else{
    motor.rotate(motor1, motor1Speed, motor1Direction);    
  }

// codes to control motor 2
  updateState2();//read all push buttons for motor2
  int pot2Value= analogRead(pot2Input);// read potentiometer value for motor 2
  motor2Speed = map(pot2Value, 0,1023, motor2Minimum, 100);// convert 0-5V to 0-100%

  if(motor2StopState ==HIGH)
  {
    motor.brake(2);  
    
  }else{
    motor.rotate(motor2, motor2Speed, motor2Direction);    
  }
  delay(100);
  
}//

/*
 * updateState1()
 * @brief reads push buttons and updates values
 * @param none
 * @return no return
 * Written by Ahmad Shamshiri for robojax.com
 * on Oct 11, 2019 in Ajax, Ontario, Canada
 */
void updateState1()
{

  if(digitalRead(motor1PushButtonCW) ==LOW && motor1StopState !=LOW){

   motor1Direction =CW;// CW button is pressed  
   motor1StopState =LOW;
  }  

  if(digitalRead(motor1PushButtonCCW) ==LOW && motor1StopState !=LOW)
  {
   motor1Direction =CCW;
   motor1StopState =LOW;   

  }  
  if(digitalRead(motor1PushButtonStop) ==LOW)
  {
   motor1StopState =HIGH;// STOP button is pressed 
  }  
}//updateState1 end

/*
 * updateState2()
 * @brief reads push buttons and updates values
 * @param none
 * @return no return
 * Written by Ahmad Shamshiri for robojax.com
 * on Oct 11, 2019 in Ajax, Ontario, Canada
 */
void updateState2()
{

  if(digitalRead(motor2PushButtonCW) ==LOW && motor2StopState !=LOW){

   motor2Direction =CW;// CW button is pressed  
   motor2StopState =LOW;
  }  

  if(digitalRead(motor2PushButtonCCW) ==LOW && motor2StopState !=LOW)
  {
   motor2Direction =CCW;
   motor2StopState =LOW;   

  }  
  if(digitalRead(motor2PushButtonStop) ==LOW)
  {
   motor2StopState =HIGH;// STOP button is pressed 
  }  
}//updateState2 end

Вещи, которые могут вам понадобиться

Файлы📁

Нет доступных файлов.