2

我希望能够使(连续运动)伺服电机旋转镜头/滤镜/偏振器,并实时为其提供强度值,然后在达到最小值时停止,然后一次又一次地这样做。

当强度最小时,我已经让它停止,但我似乎无法将它带到下一步。我需要它等待(或延迟)一小段时间,检查强度是否真的低于阈值。如果不是,那么我希望它慢慢地向后旋转,直到它达到最小值,等待然后重复,但方向相反。

#include<Servo.h>

Servo myServo;

const int resistPin = A0;
const int servPin = 9;
int intenState = analogRead(resistPin);

void setup() {
    Serial.begin(9600);
    pinMode(servPin, OUTPUT);
    pinMode(resistPin, INPUT);
    myServo.attach(9);
}

void loop(){

    if(analogRead(A0) > 500){
        myServo.write(120);
    }else if(analogRead(A0) <= 500){
        myServo.write(94);
    }
}

这是我目前必须停止伺服的代码,但是,由于需要准确性以及读取光强度和向伺服电机发送命令之间存在轻微延迟,我需要它能够重新检查该值,然后相应地重新调整,直到它尽可能准确。(显然我知道强度值会根据随机噪声/波动而变化,这就是为什么最小强度将<=而不是直线上升==)。

4

1 回答 1

1

好的,我明白了。在 Arduino 中,您可以使用延迟命令使其等待。并在采取行动之前平均说 5 个值。参考:https ://www.arduino.cc/en/Reference/Delay 示例:delay(1000) //1 秒延迟

#include<Servo.h>

Servo myServo;

const int resistPin = A0;
const int servPin = 9;
int intenState = analogRead(resistPin);
int xa=0;

void setup()
{
    Serial.begin(9600);
    pinMode(servPin, OUTPUT);
    pinMode(resistPin, INPUT);
    myServo.attach(9);
}

void loop()
{
  for (int i=0;i<5;i++)
  {
     xa+=analogRead(A0);
     delay(1000);
  }

  xa=xa/3;  //averaging the 3 collected values at 1 seconde delay each.
  //now its time to compare.

  if(xa > 500)
  {
        myServo.write(120);
  }

  else if(xa <= 500)
  {
        myServo.write(94);
  }

}
于 2016-07-13T15:44:42.173 回答