搜索代码

Lesson 54-1: Controlling a Single DC Motor Using a Potentiometer and Push Buttons

Lesson 54-1: Controlling a Single DC Motor Using a Potentiometer and Push Buttons

487-Lesson 54: Controlling a DC motor using a potentiometer and push buttons
语言: C++
/*
 
 * Lesson 54: Controlling a DC motor using a potentiometer and push buttons | Arduino Step By Step Course
 * Library Example for L298N Module to control a DC motor with 3 push buttons (see the link for controlling 2 motors)
 * 
 * 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
 * 
 * 
 * Watch video instruction for this code: https://youtu.be/_o7hCxYKLyc
 * 
 * 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
 
 
 
 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
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 
 
 // 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, IN2, IN3, ENB, true);
 
 void setup() {
   Serial.begin(115200);
   motor.begin();
 
   //L298N DC Motor by Robojax.com
   pinMode(motor1PushButtonCW, INPUT_PULLUP);
   pinMode(motor1PushButtonStop, INPUT_PULLUP);
   pinMode(motor1PushButtonCCW, INPUT_PULLUP); 
    
 }
 
 
 void loop() {
   updateState1();//read all push buttons
   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);    
   }
   //motor.demo(1);
 
   //motor.rotate(motor1, motor1Speed, CW);//run motor1 at 60% speed in CW direction
  delay(100);
 
 
 
   
 }//
 
 /*
  * updateState1()
  * @brief reads push buttons and updates values
  * @param none
  * @return no return
  * Written by Ahmad Shamshiri for robojax.com
  * on October 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 
   }  
 }//updateState end

|||您可能需要的东西

文件📁

没有可用的文件。