L298N Driver Arduino Library
网址
L298N.h
#ifndef L298N_H
#define L298N_H
#include "Arduino.h"
class L298N
{
public:
L298N(uint8_t pinIN1, uint8_t pinIN2, uint8_t pinEnable);
void setPWM(int command);
void init();
private:
const uint8_t _pinIN1;
const uint8_t _pinIN2;
const uint8_t _pinEnable;
};
#endif
L298N.cpp
// motor.cpp
#include "L298N.h"
L298N::L298N(uint8_t pinIN1, uint8_t pinIN2, uint8_t pinEnable): _pinIN1(pinIN1), _pinIN2(pinIN2), _pinEnable(pinEnable){
}
void L298N::init() {
pinMode(_pinIN1, OUTPUT);
pinMode(_pinIN2, OUTPUT);
pinMode(_pinEnable, OUTPUT);
digitalWrite(_pinEnable, LOW);
}
void L298N::setPWM(int command) {
if(command > 0){
analogWrite(_pinEnable, command);
digitalWrite(_pinIN2, LOW);
digitalWrite(_pinIN1, HIGH);
}
else if(command < 0){
analogWrite(_pinEnable, abs(command));
digitalWrite(_pinIN2, HIGH);
digitalWrite(_pinIN1, LOW);
}
else{
analogWrite(_pinEnable, 0);
digitalWrite(_pinIN2, LOW);
digitalWrite(_pinIN1, LOW);
}
}
example
/*
* L298N Dual Channel driver library
* Version : 1.0
* Status : Simple Library
* web: https://www.etronicskh.com/
*
*/
#include <L298N.h>
#define ENA 3
#define IN1 4
#define IN2 5
#define ENB 6
#define IN3 7
#define IN4 8
L298N motor1(IN1, IN2, ENA);
L298N motor2(IN3, IN4, ENB);
void setup() {
Serial.begin(9600);
motor1.init();
motor2.init();
}
void loop() {
motor1.setPWM(150); //motor1 forward with 150 PWM value
motor2.setPWM(150); //motor2 forward with 150 PWM value
delay(5000);
motor1.setPWM(0); //motor1 Stop
delay(3000);
motor1.setPWM(-200); //motor1 backward with 200 PWM value
motor2.setPWM(-200); //motor2 backward with 200 PWM value
delay(3000);
}