IN1、IN2控制输出A,IN3、IN4控制输出B。
以A方向输出为例,如表格:
IN1 | IN2 | 电机旋转方向 |
LOW | HIGH | 正转 |
HIGH | LOW | 反转 |
以控制一个电机为例:
#define right_motor1 11 //连接IN1的引脚
#define right_motor2 12 //连接IN2的引脚
void setup()
{
pinMode(right_motor1,OUTPUT);
pinMode(rigth_motor2,OUTPUT);
}
void loop()
{
run();
}
void run()
{
analogWrite(right_motor1,0); //IN1连接引脚低电平
analogWrite(right_motor2,200); //IN2连接引脚高电平
//电机正转
}
因此,一个L298N电机驱动模块只能控制2个电机(不正确)
控制2个电机的代码:
#define right_motor1 11 //连接IN1的引脚
#define right_motor2 12 //连接IN2的引脚
#define left_motor1 7 //连接IN3的引脚
#define left_motor2 8 //连接IN4的引脚
void setup()
{
pinMode(right_motor1,OUTPUT);
pinMode(rigth_motor2,OUTPUT);
pinMode(left_motor1,OUTPUT);
pinMode(left_motor2,OUTPUT);
}
void loop()
{
run();
}
void run()
{
analogWrite(right_motor1,0); //IN1连接引脚低电平
analogWrite(right_motor2,200); //IN2连接引脚高电平
analogWrite(left_motor1,0); //IN3连接引脚低电平
analogWrite(left_motor2,200); //IN4连接引脚高电平
//电机正转
}
控制两个电机带动两个轮子的简单运动:
#include <IRremote.h>
#define right_motor1 11 //连接IN1的引脚
#define right_motor2 12 //连接IN2的引脚
#define left_motor1 7 //连接IN3的引脚
#define left_motor2 8 //连接IN4的引脚
#define IRRECV_PIN 12 //红外接收引脚
IRrecv myIRrecv(IRRECV_PIN); //实例化
decode_results results; //声明接收编码的信息的结构体对象
void setup()
{
myIRrecv.enableIRIn(); //初始化红外编码
pinMode(right_motor1,OUTPUT);
pinMode(rigth_motor2,OUTPUT);
pinMode(left_motor1,OUTPUT);
pinMode(left_motor2,OUTPUT);
Serial.begin(9600);
}
void loop()
{
if(myIRrecv.decode(&result)){
//接收到了编码信息
if(results.value == ){
forward();
}
if(results.value == ){
backward();
}
if(results.value == ){
turnleft();
}
if(results.value == ){
turnright();
}
Serial.println(results.value,HEX);//用十六进制打印编码信息
myIRrecv.resume(); //接收下一个编码
}
}
void forward()
{
analogWrite(right_motor1,0); //IN1连接引脚低电平
analogWrite(right_motor2,200); //IN2连接引脚高电平
analogWrite(left_motor1,0); //IN3连接引脚低电平
analogWrite(left_motor2,200); //IN4连接引脚高电平
//电机正转
}
void backward()
{
analogWrite(right_motor1,200); //IN1连接引脚高电平
analogWrite(right_motor2,0); //IN2连接引脚高低平
analogWrite(left_motor1,200); //IN3连接引脚高电平
analogWrite(left_motor2,0); //IN4连接引脚低电平
//电机反转
}
void turnleft()
{
analogWrite(right_motor1,0); //IN1连接引脚低电平
analogWrite(right_motor2,0); //IN2连接引脚低电平
analogWrite(left_motor1,200); //IN3连接引脚高电平
analogWrite(left_motor2,0); //IN4连接引脚低电平
//左边电机不动,右边电机正转
}
void turnright()
{
analogWrite(right_motor1,200); //IN1连接引脚高电平
analogWrite(right_motor2,0); //IN2连接引脚低低平
analogWrite(left_motor1,0); //IN3连接引脚低电平
analogWrite(left_motor2,0); //IN4连接引脚低电平
//左边电机正转,右边电机不动
}
后来通过查找资料发现,一个L198N能驱动4个电机的转动
但是较复杂,还是使用两个L298N来进行驱动