2016-07-13 4 views
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); 
    } 
} 

これが原因精度サーボモータに指令を送信し、その後、光の強度を読み取るとの間に存在するわずかな遅延を必要とする、私は現在のサーボを停止しなければならないコードであるが、値を再確認し、できるだけ正確になるまでそれに応じて再調整できるようにする必要があります。 (明白に私は強度値がランダムな雑音/変動に基づいて変化することを理解しており、これは最小強度が< =真直ぐな上==である理由である)。

答えて

1

わかりました。 Arduinoでは、Delayコマンドを使用して待機させることができます。 そして、移動する前に平均5つの値を取る。 リファレンス:https://www.arduino.cc/en/Reference/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); 
    } 

} 
関連する問題