L298N


 IN1、IN2控制输出A,IN3、IN4控制输出B。

以A方向输出为例,如表格:

IN1IN2电机旋转方向
LOWHIGH正转
HIGHLOW反转

以控制一个电机为例:

#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来进行驱动

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值