为什么我的伺服电机在尝试前进时不会停止旋转?

Why won't my servo motors stop spinning when trying to go forward?

我需要让这个物体跟随机器人,它使用 2 个伺服电机移动,并使用超声波传感器检测物体的位置以及 Arduino 应该告诉伺服系统移动的位置。但是,问题似乎在于,每当伺服电机试图向前或向后移动时,它们只会一直旋转。我已尝试检查是否有松动的电线,但电线似乎没有松动,我已尝试更改我编写代码的方式,但似乎还没有任何效果...

还有一些相关代码(不是全部):

void forward() {
  for (pos = 0; pos <= 180; pos++)
  {
    for (pos2 = 0; pos2 <= 180; pos2++)
    {   
      myServo1.write(pos);
      myServo2.write(pos2);
      delay(15);
    }
  }
}

int Distance_thing() {
  digitalWrite(Trig, LOW);
  delayMicroseconds(2);
  digitalWrite(Trig, HIGH);
  delayMicroseconds(20);
  digitalWrite(Trig, LOW);
  float Fdistance = pulseIn(Echo, HIGH);
  Fdistance= Fdistance / 58;
  return (int)Fdistance;
}

void loop() {
  rightDistance = Distance_thing();
  leftDistance = Distance_thing();

  if ((rightDistance > 70) && (leftDistance > 70)) {
    stop();
    delay(500);
  }
  else if ((rightDistance >= 20) && (leftDistance >= 20)) {
    forward();
    delay(500);
  }
  else if ((rightDistance <= 10) && (leftDistance <= 10)) {
    back();
    delay(500);
  }
  else if (rightDistance - 3 > leftDistance) {
    left();
    delay(500);
  }
  else if (rightDistance + 3 < leftDistance) {
    right();
    delay(500);
  }
  else {
    stop();
    delay(500);
  }
}

paddy 已经指出你的动作需要很长时间。

嵌套的 for 循环将调用 delay(15) 181*181 次。那是 32716 乘以 15 毫秒。共8.2分钟。

您的代码的另一个问题是您希望伺服系统在 15 毫秒内从 180° 到 0° return,这是不会发生的。

也不需要在内循环中调用 myServo1.write(pos),因为 pos 仅在外循环中更新。总共有 32580 次不必要的函数调用。

您应该学习如何编写非阻塞代码。有大量可用资源。 您可能还会养成检查数学的习惯。不要只是拖延。想想延迟 181*181*15ms!

到底意味着什么