Arduino直流电机与伺服电机同步

Arduino dc motor in sync with servo motor

我有这个简单的 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 不支持它。我找到了另一种使它们彼此同步的方法,即使用循环或计时,但示例代码令人困惑,所以有人可以给我一个代码片段和一些详细的解释。

对于那些对我是如何做到的感到好奇的人..这是经过少量修改的代码。因为我发现运动是向后而不是向前。

#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);
}