2016-08-23 42 views
0

功能:Arduino的按鈕上沒有連續的串行 「1」

串行監視器在每100ms正在打印 「0」,這表明該buttonState爲LOW。

但是,當用戶按下紅色圓頂按鈕Red Dome Button時,假設發信號通知buttonState爲高電平,並且在串行監視器上,應該每隔100ms打印一次「1」,直到用戶再次按下紅色圓頂按鈕爲止表示buttonState爲低電平並且串行監視器正在打印「0」。

問題:

串行監控輸出「0」,在每100ms最初,當我按下紅色圓頂按鈕時,buttonState返回一個HIGH和串行監控正在輸出「1 」。但是,串行「1」不成立,並立即恢復爲「0」。

當我連續按下按鈕時,串行「1」將只顯示在串行監視器中。

含義:

正確的行爲

初始狀態 - >串行監控將輸出所有串行0直到用戶按下按鈕,然後串行監控將輸出所有串行1,直到用戶按下按鈕再然後輸出將再換串口0

當前行爲

我 - >串行監視器將輸出所有串行0直到用戶按下按鈕,然後串行監視器將輸出串行1,但立即,串行將返回到0

因此,如何啓用串行狀態保持在按下按鈕後串行1,只有當我再次按下按鈕時,串行纔會顯示0?我需要一些幫助。謝謝

代碼:

const int buttonPin = 2;  // the number of the pushbutton pin 

// variables will change: 
int buttonState = 0;   // variable for reading the pushbutton status 

void setup() { 
    // initialize the pushbutton pin as an input: 
    pinMode(buttonPin, INPUT); 
    Serial.begin(9600); // Open serial port to communicate 
} 

void loop() { 
    // read the state of the pushbutton value: 
    buttonState = digitalRead(buttonPin); 

    // check if the pushbutton is pressed. 
    // if it is, the buttonState is HIGH: 
    if (buttonState == HIGH) { 
    Serial.println("1"); 
    } 
    else { 
    Serial.println("0"); 
    } 
delay(100); 
} 

回答

1

看來你釋放它(不像是2個狀態按鈕)後您的按鈕被未按。所以你需要創建你自己的狀態變量,在按下按鈕時切換。

假設您想要更改從按鈕檢測到HIGH時的狀態。這意味着你必須檢測從低電平到高電平的變化,而不僅僅是在高電平模式下。所以要做到這一點,你需要存儲按鈕的最後一個狀態。此外,您需要保持一個輸出狀態,當檢測到從LOW變爲HIGH時切換。

在你的代碼應該是這樣的:

const int buttonPin = 2;  // the number of the pushbutton pin 

// variables will change: 
int buttonState = 0;   // variable for reading the pushbutton status 
int buttonLastState = 0; 
int outputState = 0; 


void setup() { 
    // initialize the pushbutton pin as an input: 
    pinMode(buttonPin, INPUT); 
    Serial.begin(9600); // Open serial port to communicate 
} 

void loop() { 
    // read the state of the pushbutton value: 
    buttonState = digitalRead(buttonPin); 
    // Check if there is a change from LOW to HIGH 
    if (buttonLastState == LOW && buttonState == HIGH) 
    { 
    outputState = !outputState; // Change outputState 
    } 
    buttonLastState = buttonState; //Set the button's last state 

    // Print the output 
    if (outputState) 
    { 
    Serial.println("1"); 
    } 
    else 
    { 
    Serial.println("0"); 
    } 
    delay(100); 
} 
+0

2個狀態按鈕的行爲等,其中一次由用戶按下開關,它會關閉電路,並再次鬱悶的時候,它會打開電路。我對嗎?所以顯然我的物理按鈕只有一箇中斷按鈕。我對嗎? – Luke

+0

我認爲你的按鈕就像你所說的。代碼是否工作? – dubafek

+0

是的,它的確如此。謝謝 – Luke