2013-10-20 57 views
0

該程序旨在計算按鈕1的按下次數,然後按下按鈕2使其脫離循環。 button2就像一個回車鍵。Arduino將不會讀取按鈕

如果我運行do while語句中的內容而不執行,而它將計算每個按鈕的推送。我用這個來驗證我是否正確構建了我的電路。但是由於某些未知的原因,如果我將相同的代碼放入一個do或者只是一段時間,那麼它就不會讀取這些引腳。它將在do中循環,但不會退出到最後的done語句。如果我按下兩個按鈕中的任何一個按鈕來啓動arduino,那麼它將註冊一個按鈕正在按下,但只要我放開,它就不會再做任何事情。請告訴我我做錯了什麼。

我的代碼

int ledpin = 11; 
int button1pin = 7; 
int button2pin = 2; 
int button1counter = 0; 
int button1state = 0; 
int lastButton1state = 0; 
int button2state = 0; 
int lastButton2state = 0; 
int button2counter = 0; 

void setup() {     
    // initialize the digital pin as an output. 
    pinMode(button1pin, INPUT); 
    pinMode(button2pin, INPUT); 
    Serial.begin(9600); 
} 

void loop() { 
    button1state = digitalRead(button1pin); 
    button2state = digitalRead(button2pin); 
    do { 
    if (button1state != lastButton1state) { 
    if (button1state == HIGH) { 
     button1counter++; 
     Serial.print("number of button 1 pushes: "); 
     Serial.println(button1counter); 
     } 
     lastButton1state = button1state; 
    } 
    } while(button2state == LOW); 



    Serial.println("done"); 


} 

感謝我改變了它,當然你的權利。不過,我不明白爲什麼你的權利。讓我用我的理解評論代碼,如果我錯了,請糾正我。

void setup() {     

    pinMode(button1pin, INPUT);//tells comp to make button 1 input 
    pinMode(button2pin, INPUT);//tells comp to make button 2 input 
    Serial.begin(9600); 
} 

void loop() { 
    button1state = digitalRead(button1pin);//tells comp to begin reading pin? but for how long? 
    button2state = digitalRead(button2pin); 
    do { 

回答

1

你讀按鈕狀態while循環,因此,您button1state和button2state永遠不會更新,這就是爲什麼你在無限循環中輸入剛纔做變化不大:

void loop() { 
    do { 
     button1state = digitalRead(button1pin); 
     button2state = digitalRead(button2pin); 

     if (button1state != lastButton1state) { 
      if (button1state == HIGH) { 
       button1counter++; 
       Serial.print("number of button 1 pushes: "); 
       Serial.println(button1counter); 
      } 
      lastButton1state = button1state; 
     } 
    } while(button2state == LOW); 

    Serial.println("done"); 


} 
+0

感謝我改變它,當然你的權利。不過,我不明白爲什麼你的權利。讓我用我的理解評論代碼,如果我錯了,請糾正我。 – Chad

+0

我不知道如何在這裏正確添加代碼? – Chad

+0

@Chad編輯你的問題,不要刪除當前的內容,只需將下面的代碼和文本添加到你的問題,你想在這裏發表評論。 – Vallentin