2014-07-22 59 views
0

我有一個Arduino Mega 2560.我有一個LED接地並通過麪包板連接到引腳12,開關通過麪包板連接到引腳7和引腳2。我編寫了這個程序,以便按下按鈕可以在開啓和關閉之間改變LED的狀態。組件都似乎工作,所以我認爲這是一個編碼問題。這裏是我的代碼:我該如何解決這個arduino代碼?(詳情如下)

boolean running = false; 
boolean ledon = true; 
void statechange() { 
    if(running == false) { 
    running = true; 
    ledon = !ledon; 
    if(led on) { 
     digitalWrite(12, HIGH); 
    } else { 
     digitalWrite(12, LOW); 
    } 
    delay(1000); 
    running = false; 
    } 
} 

void setup() { 
    pinMode(12, OUTPUT); 
    pinMode(7, OUTPUT); 
    digitalWrite(7, HIGH); 
} 

void loop() { 
    attachInterrupt(0,statechange,CHANGE); 
} 

我沒有收到任何錯誤,它只是不起作用,無論如何LED都不亮。

+0

http://en.wikipedia.org/wiki/Magic_number_%28programming%29#Unnamed_numerical_constants –

回答

0

您確定這是對嗎?

if(ledon) 
    { 
     digitalWrite(12, HIGH); 
    } 
    else 
    { 
     digitalWrite(12, LOW); 
    } 

它看起來像「如果LED亮,打開它,否則,如果LED熄滅,將其關閉。」

它不應該是:

if(ledon) 
    { 
     digitalWrite(12, LOW); 
     ledon = false; 
    } 
    else 
    { 
     digitalWrite(12, HIGH); 
     ledon = true; 
    } 

如果您使用ledon跟蹤狀態的,但是獨立改變你的if語句的狀態下,兩個可能不同步。特別是如果其他地方的代碼可以改變ledon的狀態。

困擾我的另一件事是這一行:if(running == false)

如果是真的(例如,您硬件沒有運行?),那麼什麼是試圖在那個改變I/O狀態點時間?

+0

該變量的代碼位翻轉之前,我想。 – user3102599

+0

@ user3102599一旦你知道它被更改爲...我會實現它......請參閱編輯。 –

0
boolean ledon = true; 

void statechange() 
{ 
    ledon = !ledon; 
    digitalWrite(12, ledon ? HIGH : LOW); 
} 

void setup() 
{ 
    pinMode(12, OUTPUT); 
    pinMode(7, OUTPUT); 
    digitalWrite(7, HIGH); 

} 

void loop() 
{ 
    attachInterrupt(0,statechange,CHANGE); 
} 
+0

其實我只是想讓LED在按下按鈕時改變狀態,而不是閃爍,不過謝謝。 – user3102599

+0

在這種情況下,您的代碼可以簡化。我會更新我的答案。 –