2016-11-22 2658 views
0

我已經連接3個設備到我的Aruino Uno:伺服電機,LED和一個距離傳感器。現在,當距離10釐米或更小時,我的指示燈熄滅。當距離大於10cm時,我的指示燈正在工作,這很好。但是現在,當我添加伺服電機時,我需要等待環路完成後,我的距離傳感器才能將信號發送給我的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

儘管更簡單的解決方案是將LED檢查移到for循環中。 – m0skit0

+0

無法獲得伺服的當前位置? – McNets

回答

0

這是一個常見問題。 Here是一個偉大答案我在Adafruit教程部分找到。

鏈接中解釋的解決方案簡而言之,向您展示瞭如何使用millis()函數,而不是delay(),以及爲什麼這對多任務更好。

+0

感謝您的信息 – olalalaa1599