tom 发表于 2013-4-26 23:22:04

L298N双直流电机控制代码

直流电机控制代码


/*
为了看清电机的转动,使用了 带齿轮减速箱的微型马达,
由于它的需要的电压低,可以直接使用Arduino板上的5伏电压。

L298N也使Arduino板载 5伏电压

L298N电机驱动自己焊的
*/

//这个电机驱动板使用数字端口4 5 6 7 控制电机
//正确连接你的电机到M1+ M1- M2+ M2-
//数字端口10 11 连接到L298N的使能端接口
//下载代码到Arduino/
// 控制两个直流电机的正反转
//本程序作用两个直流电机先正转一秒 暂停一秒 反转一秒 如此反复


int IN1=4;
int IN2=5;
int IN3=6;
int IN4=7;

int EN1=10;//使能端口1
int EN2=11;//使能端口2
//数字端口4与5为一组,6与7为另一组
//数字端口10 11 作为直流电机的使能端
void Motor1(boolean reverse)//电机1正转
{
if (reverse) //正转
{
    digitalWrite(IN1,HIGH);
    digitalWrite(IN2,LOW);
}

else //反转
{
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,HIGH);
}

}

void Motor2(boolean reverse)//电机2转动
{
if (reverse) //正转
{
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4,LOW);
}

else //反转
{
    digitalWrite(IN3,LOW);
    digitalWrite(IN4,HIGH);
}

}

void aa()//先正转1秒停1秒后反转1秒
{


//正转
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
delay(1000);

//暂停一秒
stopMotor(true);
delay(1000);
stopMotor(false);//恢复电机使能端高电平


//反转
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);


delay(1000);
// 暂停
stopMotor(true);
delay(1000);
stopMotor(false);



}

void stopMotor(boolean r)//电机停转
{
if (r)
{
    analogWrite(EN1,0);
    analogWrite(EN2,0);
}
else
{
    analogWrite(EN1,255);
    analogWrite(EN2,255);
}
}

void setup()
{
int i;


for (i=4;i<=7;i++) //为Ardunio 电机驱动板
    pinMode(i,OUTPUT); //设置数字端口4,5,6,7为输出模式

for (i=4;i<=7;i++)
    digitalWrite(i,OUTPUT); //设置数字端口4,5,6,7为HIGH,电机保持不动


pinMode(10,OUTPUT);//设置数字端口1011为输出模式
pinMode(11,OUTPUT);
Serial.begin(9600);

}

void loop()
{
aa();//两个直流电机正转1秒 暂停一秒 反转一秒


}



文少 发表于 2013-4-27 00:13:11

沙个发,等版主射你,同顶下~~

254506789 发表于 2013-10-19 10:12:42

第116行是不是错了。digitalWrite(i,OUTPUT); //设置数字端口4,5,6,7为HIGH,电机保持不动。应当改为:digitalWrite(i,HIGH); //设置数字端口4,5,6,7为HIGH,电机保持不动

小白兔 发表于 2013-4-27 12:49:50

好贴,顶一下。:D

xxx 发表于 2013-4-28 10:12:53

是不是木有转速?

human2010 发表于 2013-10-21 08:27:34

细心的楼主!支持一下!

atsky 发表于 2014-2-2 22:28:37

void Motor1(boolean reverse)//电机1转动
void Motor2(boolean reverse)//电机2转动

这两段函数没有看到程序后续哪里调用,为什么要这么写呢?求指教

一叶萧然 发表于 2014-4-16 08:38:58

l298n的驱动芯片确实很好 就是一旦需要驱动大型的电机电压比较是问题

xuss1994 发表于 2014-11-13 18:25:20

为什么我按照这个来的,却只有一个电机会转

奋斗的悦悦 发表于 2014-12-25 16:03:43

谢谢楼主!同9楼的点,为什么我的一开始是两个电机转动,可是后来就一个电机转?

奋斗的悦悦 发表于 2014-12-25 16:05:40

奋斗的悦悦 发表于 2014-12-25 16:03 static/image/common/back.gif
谢谢楼主!同9楼的点,为什么我的一开始是两个电机转动,可是后来就一个电机转?

估计是发帖时间太久了,楼主已经忘记发过这个帖子了

GaryChan 发表于 2014-12-30 17:17:30

同楼上……仅有一电机在转……

我的孤独 发表于 2015-3-28 21:23:46

void Motor1(boolean reverse)//电机1正转
{
if (reverse) //正转
{
    digitalWrite(IN1,HIGH);
    digitalWrite(IN2,LOW);
}

else //反转
{
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,HIGH);
}

}

void Motor2(boolean reverse)//电机2转动
{
if (reverse) //正转
{
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4,LOW);
}

else //反转
{
    digitalWrite(IN3,LOW);
    digitalWrite(IN4,HIGH);
}

}
这些代码可以不写吗,感觉与aa();功能一样,

kissmybabygirl 发表于 2015-4-18 00:19:33

好贴   必须顶 啊

wuzhuo 发表于 2015-5-10 17:31:56

好像不能调转速
页: [1] 2
查看完整版本: L298N双直流电机控制代码