2016-11-22 13 views
0

私は3つのデバイスを私のAruino Unoに接続しました:サーボモータ、LEDと距離センサー。距離が10cm以下になると、私のLEDが消えます。距離が10cmより大きい場合、私のLEDが点灯しています。これはうまく動作しています。しかし、今私は私のサーボモータを追加したとき私は距離センサーが私のLEDに信号を送信する前に私のループが完了するのを待つ必要があります。どうすればこの問題を解決できますか?Arduinoは同時に2つのコマンドを実行します

#include <Servo.h> 

int servoPin = 9; 

const int trigPin = 7; 
const int echoPin = 8; 
int led = 13; 
long duration, cm; 
Servo servo; 
int angle = 0; 

void setup() { 
    // initialize serial communication: 
    Serial.begin(9600); 

    pinMode(led,OUTPUT); 
    pinMode(echoPin, INPUT); 

    servo.attach(servoPin); 
} 

void loop() 
{ 


    if(afstandTotmuur() >= 10) 
    { 
    digitalWrite(led,HIGH); 
    } 
    else 
    { 
    digitalWrite(led,LOW); 
    } 

    for(angle = 0; angle < 180; angle++) 
    {         
    servo.write(angle);    
    delay(15);     
    } 

} 


long afstandTotmuur() 
{ 
    pinMode(trigPin, OUTPUT); 
// digitalWrite(trigPin, LOW); 
// delayMicroseconds(2); 
    digitalWrite(trigPin, HIGH); 
    delayMicroseconds(10); 
    digitalWrite(trigPin, LOW); 

    duration = pulseIn(echoPin, HIGH); 

    // convert the time into a distance 
    cm = microsecondsToCentimeters(duration); 

    return cm; 
} 



long microsecondsToCentimeters(long microseconds) 
{ 
    return microseconds/29/2; 
} 
+1

http://arduino.stackexchange.com/questions/286/how-can-i-create-multiple-running-threads – m0skit0

+0

もっと簡単な解決策は、forループ内のLEDチェックを移動することです。 – m0skit0

+0

はサーボの現在位置を取得できませんか? – McNets

答えて

0

これは一般的な問題です。 はgreatです。私はAdafruitチュートリアルのセクションで見つけました。

このリンクで解説した解決方法は、delay()ではなくmillis()機能を使用する方法を示しています。なぜこれがマルチタスキングの方がはるかに優れているのでしょうか。

+0

情報ありがとう – olalalaa1599

関連する問題