2014-11-03 91 views
0

交通燈只是保持紅色而不是交替。 想要它保持10秒,然後關閉10秒,繼續無窮無盡。 不想使用延遲功能,因爲在LED持續交替時,cos需要做其他的事情。 感謝Arduino代碼LED故障可替換

int red = 10; // red traffic light LED on pin 10 
int redcounter; 


// the setup routine runs once when you press reset: 
void setup() 
{     
    // initialize the digital pin as an output. 
    pinMode(red, OUTPUT);  

    digitalWrite(red, LOW); 
    redcounter = 0; 
} 

// the loop routine runs over and over again forever: 
void loop() 
{ 
    redcounter = redcounter +1; 
    if(redcounter==1000) 
    { 
    redcounter=0; 
    if(digitalRead(red)==HIGH) 
    { 
     digitalWrite(red, LOW); 
    }  
    if(digitalRead(red)==LOW) 
    { 
     digitalWrite(red, HIGH); 
    } 
} 

回答

0

使用ELSEIF,而不是如果在這裏:

if(digitalRead(red)==HIGH) 
{ 
    digitalWrite(red, LOW); 
}  
else if(digitalRead(red)==LOW) 
{ 
    digitalWrite(red, HIGH); 
} 

在舊有的解決方案每次轉身衝低,這是變高了片刻後。

+0

仍然留下永久LED上恐怕 – user3062510 2014-11-03 12:17:57

+0

已經嘗試了幾個值「如果(redcounter == 1000)」很好,但沒有任何區別 – user3062510 2014-11-03 12:18:46

+0

你能提供完整的代碼?有可能沒有調用setup,因此redcounter沒有初始化? – 2014-11-03 12:19:13

1

您嘗試讀取配置爲OUTPUT的端口。我不知道這是否應該起作用,但是如果您簡單地使用另一個端口作爲INPUT並反饋您希望在該端口中檢查的信號,則會更加清楚。但我不確定如果檢查你自己產生的信號的狀態(?)是否合理。而且你的redcounter只是「主動等待」,而且arduino提供了一個延遲功能。在你的代碼

int red=10; 
int signal=11; 

void setup() 
{     
    pinMode(red, OUTPUT); 
    pinMode(signal, INPUT); 
    digitalWrite(red, LOW); 
} 

void loop() 
{ 
    delay(1000); 
    if(digitalRead(signal)==HIGH) 
    { 
     digitalWrite(red, LOW); 
    }  
    if(digitalRead(signal)==LOW) 
    { 
     digitalWrite(red, HIGH); 
    } 
} 
0

兩個問題是digitalread將無法讀取輸出引腳,如果你使用一個增量計數器,你將不能夠準確地表示時間。對不起,如果我錯過了一個支架,或者我在移動應用程序上做了這個。 使用此:

int red = 10; // red traffic light LED on pin 10 
int redcounter; 
boolean pinState = false; 
int delayTime = 10000; 

// the setup routine runs once when you press reset: 
void setup() { 
    // initialize the digital pin as an output. 
    pinMode(red, OUTPUT); 
    digitalWrite(red, LOW); 
    redcounter = millis(); 
} 

// the loop routine runs over and over again forever: 
void loop() { 
    if((millis() - red counter) > delayTime) { 
     redcounter=millis(); 

     if(pinState) { 
      digitalWrite(red, LOW); 
      pinState = false; 
     } 
     else { 
      digitalWrite(red, HIGH); 
      pinState = true; 
     } 
    } 
}