我有一个简单的arduino代码,它使用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不支持它。我找到了另一种使它们彼此同步的方法,即使用循环或定时,但是示例代码令人困惑,所以有人可以给我一个代码片段,并给出一些详细的解释。
发布于 2015-02-07 05:01:58
对于那些对我是如何做的感到好奇的人来说,it..this是带有小版本的代码。因为我发现运动是倒退而不是前进。
#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); // right side servo motor
myservo2.attach(42); // left side servo motor
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
}
void loop()
{
intialPos();
while(motor_run())
{
intialPos();
turnOne();
delay(3000);
intialPos();
delay(10000);
turnSecond();
delay(3000);
}
}
int motor_run()
{
Serial.println("dc motor is working");
analogWrite(ENA, 255);// motor speed
digitalWrite(IN1,HIGH);// rotate forward
digitalWrite(IN2,LOW);
analogWrite(ENA2, 255);// motor speed
digitalWrite(IN3,HIGH);// rotate forward
digitalWrite(IN4,LOW);
return (1);
}
void intialPos()
{
Serial.println("servo motor in intial position");
myservo.write(70);
myservo2.write(135);
}
void turnOne()
{
Serial.println("servo motor turnOne");
myservo2.write(170);
myservo.write(135);
}
void turnSecond()
{
Serial.println("servo motor turnSecond");
myservo2.write(70);
myservo.write(30);
}
https://stackoverflow.com/questions/28300833
复制相似问题