【问题标题】:How to make a Servo motor do something, have the uno check a value and then do something based on the updated value?如何让伺服电机做某事,让 uno 检查一个值,然后根据更新的值做某事?
【发布时间】:2016-07-13 23:44:42
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: arduino arduino-uno servo


    【解决方案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);
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 2020-12-13
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多