1

我想用360伺服和超声波传感器做一个门,这里我用if else。当超声波条件 >= 10 cm 时,舵机应向右旋转一圈 5 秒,反之亦然。但是当它达到> = 10 cm 伺服器继续旋转而不停止的条件时,如何让它停止1 圈?我还需要超声波传感器的距离数据来显示。我是这方面的初学者,我将非常感谢您的帮助。

这是我的代码:

#include <Wire.h>
#include <Servo.h>                      //Servo library
#define echoPin 3                       //triger pin, echo pin
#define triggerPin 4

int waktu;
int jarak;
int hasiljarak;
Servo servo;

void setup() 
{
  Serial.begin(9600);
  pinMode(triggerPin, OUTPUT);
  pinMode(echoPin, INPUT);
  
}

void loop() 
{
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  waktu = pulseIn(echoPin, HIGH);
  
  jarak = waktu * 0.034 / 2;

  Serial.print(jarak);
  Serial.print(" CM");
  delay(100);
  servo.attach(9);

  if(jarak<=10)
  {
    servo.write(2000);
    delay(5000);
  }
  else if(jarak>=30)
  {
    servo.write(1000);
    delay(5000);
  }
  else
  {
    servo.write(1500);
    delay(1000);
  }
  servo.detach();

}
4

1 回答 1

0

我已经用这个代码完成了伺服

void loop()
{
  int ultra1 = tinggiUltra - sonar.ping_cm();
  int ultra2 = tinggiUltra - sonar2.ping_cm();
  
  delay(1000);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  Serial.print(ultra1); // Send ping, get distance in cm and print result (0 = outside set distance range)
  Serial.println("cm");
  Serial.print(ultra2);
  Serial.println("cm");

  if (ultra1 >= 11 && ultra1 <= 40 && ultra2 >=11)
  {
    servo.write(posClose);
    delay(2000);
  }
  else if (ultra1 >= 5 && ultra1 <= 10 && ultra2 <=10)
  {
    servo.write(posOpen);
    delay(2000);
  }
  else if (ultra2 <= 4 && ultra2 >= 0)
  {
    servo.write(pos);
    delay(2000);
  }

  statPin = servo.read();

}
    delay(2000);
  }
  else if (ultra1 >= 5 && ultra1 <= 10 && ultra2 <=10)
  {
    servo.write(posOpen);
    delay(2000);
  }
  else if (ultra2 <= 4 && ultra2 >= 0)
  {
    servo.write(pos);
    delay(2000);
  }

  statPin = servo.read();

}

对于我使用的伺服,它可以正常工作,我使用 MG955 360 伺服。对于我使用线程打开和关闭门的项目。我将 if else 用于代码,通过添加一个参数来限制我制作的门的移动,它工作得很好。并感谢您的回答

如果有人必须更正我的程序代码,我将不胜感激

于 2021-12-25T07:40:32.143 回答