【发布时间】:2015-02-03 14:04:01
【问题描述】:
我有这个简单的 arduino 代码,它使用 L298N 驱动两个直流电机,L298N 是一个电机驱动器和两个伺服电机。该代码适用于电机驱动器,但不适用于伺服电机:
#include <Servo.h>
Servo myservo;
Servo myservo2;
int num=1;
int IN1=8;
int IN2=9;
int ENA=3;
int IN3=10;
int IN4=11;
int ENA2=4;
void setup()
{
myservo.attach(40);
myservo2.attach(42);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
}
void loop()
{
intialPos();
while(motor_run())
{
turnOne();
delay(3000);
intialPos();
delay(10000);
turnSecond();
delay(3000);
}
}
int motor_run()
{
analogWrite(ENA, 1500);// motor speed
digitalWrite(IN1,LOW);// rotate forward
digitalWrite(IN2,HIGH);
analogWrite(ENA2, 1500);// motor speed
digitalWrite(IN3,HIGH);// rotate forward
digitalWrite(IN4,LOW);
delay(3000);
return (1);
}
void intialPos()
{
myservo.write(70);
myservo2.write(135);
delay(2000);
}
void turnOne()
{
myservo2.write(170);
myservo.write(135);
delay(2000);
}
void turnSecond()
{
myservo2.write(70);
myservo.write(30);
delay(2000);
}
我的问题是让直流电机代码继续执行,而伺服电机做它正在转动的事情。但它所做的只是让直流电机工作而伺服电机不动。我将伺服电机用作船上的舵,所以我需要使直流电机在伺服电机转向一个方向时连续工作。我听说过多线程,但 arduino 不支持它。我找到了另一种使它们相互同步的方法,即使用周期或定时,但是示例代码令人困惑,所以有人可以给我一个代码 sn-p 和一些详细的解释。
【问题讨论】:
-
您是否仅使用伺服代码测试过您的代码?使用什么样的 Arduino? (因为您使用引脚 40 和 42 进行伺服连接。)
-
是的,我正在使用 arduino ATMega ..这就是为什么它有 40 和 42 针...伺服电机代码单独工作正常,但与直流电机集成时它不会工作
-
好的,既然你的方法内置了大的、多秒的延迟,你能添加一些调试吗...至少 Serial.printn("+motor_run");在 motor_run() 的开头,以及 return (1) 之前的等价物;声明……那你看看串口出来的是什么?
-
另外,我注意到您正在调用analogWrite(ENA, 1500)。 analogWrite 采用 0 到 255 之间的字节值。我想知道这是否会导致一些问题......
-
analogWrite(ENA, 1500) 用于直流电机的速度。无论如何,我会尝试你上面建议的那个,关于调试。
标签: arduino