Lesson 55-2: Controlling Two DC Motors Using Push Buttons
486-Lesson 55: Controlling a DC motor using push buttons
语言: C++
/*
* Lesson 55: Controlling 2 DC Motors with push buttons with L298N
* Library Example for L298N Module to control with 2 push buttons
* One push button is used for CW/CCW
and one push button is used to stop the motor
* (this code is to control 2 motors). See the first code for a single motor
Watch video for full details of this code: https://youtu.be/diS_WkUdU-8
*
*
* Written by Ahmad Shamshiri on October 20, 2019 at 14:58
* in Ajax, Ontario, Canada. www.robojax.com
*
*
*
* Get this code and other Arduino codes from Robojax.com
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 7
#define IN4 6
#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
const int pushButtonDelayTime =200;
//*** Push buttons for motor 1 started
int motor1Speed =60;// speed of motor 1 in % (60 means 60%)
const int motor1PushButtonDirection = 8;// push button for direction change
const int motor1PushButtonStop = 9;// push button for START/STOP
const int motor1Minimum =15;//30% is minimum for motor 1
// do not change below this line
int motor1Direction =CCW;//
int motor1StopState=HIGH;//Stop state of motor 1
//*** Push buttons for motor 1 started ended
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//*** Push buttons for motor 2 started
int motor2Speed =60;// speed of motor 2 in % (60 means 60%)
const int motor2PushButtonDirection = 10;// push button for direction change
const int motor2PushButtonStop = 11;// push button for START/STOP
const int motor2Minimum =15;//30% is minimum for motor 2
// do not change below this line
int motor2Direction =CCW;//
int motor2StopState=HIGH;//Stop state of motor 2
//*** Push buttons for motor 2 started ended
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// use the line below for 1 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(motor1PushButtonDirection, INPUT_PULLUP);
pinMode(motor1PushButtonStop, INPUT_PULLUP);
//L298N DC Motor by Robojax.com
// push buttons for motor 2
pinMode(motor2PushButtonDirection, INPUT_PULLUP);
pinMode(motor2PushButtonStop, INPUT_PULLUP);
}
void loop() {
updateState1();//read push buttons value for motor 1
updateState2();//read push buttons value for motor 2
if(motor1StopState ==HIGH)
{
motor.brake(1);
}else{
motor.rotate(motor1, motor1Speed, motor1Direction);
}
if(motor2StopState ==HIGH)
{
motor.brake(2);
}else{
motor.rotate(motor2, motor2Speed, motor2Direction);
}
//motor.demo(1);
//motor.rotate(motor1, motor1Speed, CW);//run motor1 at 60% speed in CW direction
delay(pushButtonDelayTime);
}//
/*
*
* updateState1()
* @brief reads push buttons and updates values
* @param none
* @return no return
* Written by Ahmad Shamshiri for robojax.com
* on Oct 13, 2019 in Ajax, Ontario, Canada
*/
void updateState1()
{
if(digitalRead(motor1PushButtonDirection) ==LOW){
if(motor1Direction ==CW)
{
motor1Direction =CCW;//
Serial.println("***** Motor 1 Now CCW");
}else{
motor1Direction =CW;//
Serial.println("***** Motor 1 Now CW");
}
} //if for direction push button
if(digitalRead(motor1PushButtonStop) ==LOW)
{
motor1StopState =1-motor1StopState;// toggle Start/stop
}// if for start/stop push button
}//updateState1 end
/*
*
* updateState2()
* @brief reads push buttons and updates values
* @param none
* @return no return
* Written by Ahmad Shamshiri for robojax.com
* on Oct 13, 2019 in Ajax, Ontario, Canada
*/
void updateState2()
{
if(digitalRead(motor2PushButtonDirection) ==LOW){
if(motor2Direction ==CW)
{
motor2Direction =CCW;//
Serial.println("***** Motor 2 Now CCW");
}else{
motor2Direction =CW;//
Serial.println("***** Motor 2 Now CW");
}
} //if for direction push button
if(digitalRead(motor2PushButtonStop) ==LOW)
{
motor2StopState =1-motor2StopState;// toggle Start/stop
}// if for start/stop push button
}//updateState2 end
|||您可能需要的东西
-
易趣从 eBay 购买 L298N 模块(关联)ebay.us
资源与参考
-
外部从 eBay 购买 L298N 模块(关联)ebay.us
-
外部从亚马逊美国(联盟)购买L298N继电器amzn.to
文件📁
没有可用的文件。