2015-04-18 384 views
1

好吧,所以我已經開始在Arduino Uno上的項目2。它涉及3個閃爍的LED。原來的想法是,綠色的LED燈會點亮,直到按下開關,這會使其他兩個LED燈連續閃爍。但是,我試圖讓綠色指示燈保持閃爍,直到按下開關(而不是在按下開關之前被動點亮)。所以我對if語句做了一個小調整,但是這不起作用(指示燈眨了一下,然後繼續點亮)。Arduino閃爍led問題

int switchState=0; 

void setup() { 
pinMode(3,OUTPUT); 
pinMode(4,OUTPUT); 
pinMode(5,OUTPUT); 
pinMode(2, INPUT); 

// put your setup code here, to run once: 

} 

void loop() { 

switchState= digitalRead(2); 

if (switchState==LOW) { 

digitalWrite(3, HIGH); 
delay(1000); 
digitalWrite(3, LOW); 
digitalWrite(4, LOW); 
digitalWrite(5, LOW); 
} 

else { 

digitalWrite(3,LOW); 
digitalWrite(4,LOW); 
digitalWrite(5, HIGH); 

delay(250); 

digitalWrite(4, HIGH); 
digitalWrite(5, LOW); 

delay(250); 

} 


// put your main code here, to run repeatedly: 

} 

將綠色LED分配給pd3,將另外兩個LED分配給pd4和pd5。

那麼,爲什麼在驗證條件後(開關是否被按下),LED指示燈只閃爍一次 - 不應該繼續閃爍?但是,當我在第二個數字寫法(3,LOW)之後插入另一個延遲時,它工作。這是什麼解釋?我是新來的,所以請清楚說明你的解釋。

回答

0

案例1: 用戶沒有按開關開關至少>delay(1000);再次運行。 在本節:

switchState= digitalRead(2); 
if (switchState==LOW)  // <---- User is not pressing switch so we 
{       //  enter the if. 
    digitalWrite(3, HIGH); 
    delay(1000); 
    digitalWrite(3, LOW); 
    // Adding delay here makes it blink. 
    digitalWrite(4, LOW); 
    digitalWrite(5, LOW); 
} 

一旦你完成了digitalWrite(3, LOW);,它是在微/毫秒重複之前的循環,你進入,如果一次。 LED實際上閃爍,但它太快,你看不到它。只要用戶沒有按下按鈕,LED就會一直亮着。

案例2: 用戶按下按鈕,並且在運行if語句後至少一次。 LED在進入其他位置時保持OFF狀態。

else 
{ 
    digitalWrite(3,LOW); 
    digitalWrite(4,LOW); 
    digitalWrite(5, HIGH); 
    delay(250); 
    digitalWrite(4, HIGH); 
    digitalWrite(5, LOW); 
    delay(250); 
} 

LED再次置爲LOW,然後保持OFF。

這有幫助嗎?

+0

我得到了數字寫(3,LOW)和數字寫(3,HIGH)之間需要幾毫秒的事實,但是1秒的延遲仍然會出現,對吧?如果條件相同(開關沒有按下),過程是否會像循環一樣運行? –

+0

@RuslanMushkaev是的,它的確如此。然後將LED重新打開。如果您願意,我可以嘗試爲您繪製波形的外觀圖。以圖形方式查看可能更容易。換個角度來看,你的LED實際上是閃爍的。但是「關閉」狀態非常短暫,你的人無法看到它。很久以前,我實際上做了一個設計,通過這樣做來改變LED的亮度。這裏有一個arduino設計:http://www.arduino.cc/en/tutorial/fade這是相同的事情。 – milenko121175

+0

好的,謝謝,我想我知道了 - 它每秒都會閃爍,但眨眼很快,我沒有看到它。這可以通過調整LOW部分之後的延遲來改變。 –