我正在嘗試執行 ac 程式,該程式對 raspberrypi 進行編程以打開/關閉/閃爍面包板上的 LED 二極管。面包板上有一個按鈕,我使用 digitalread 功能“單擊”它。理想情況下,程式應該通過單擊一次按鈕來運行,LED 將亮起。再次單擊,它將關閉燈。再點擊一次,它會閃爍幾次,回圈會重復。但是,當我使用這個程式時,似乎跳過了前 2 個 if 陳述句。當我點擊按鈕時,它只會閃爍。有人知道為什么嗎?
int main (int argc, char **argv){
wiringPiSetupGpio();
int counter=1;
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_BUTTON, INPUT);
printf("LED and button pins have beens setup.\n");
while (1)
{
if ((counter==1) && (digitalRead(PIN_BUTTON))) {
digitalWrite(PIN_LED, HIGH);
counter ;
}
if ((counter==2) && (digitalRead(PIN_BUTTON))){
digitalWrite(PIN_LED, LOW);
counter ;
}
if ((counter==3) && (digitalRead(PIN_BUTTON))){
digitalWrite(PIN_LED, HIGH);
delay(500);
digitalWrite(PIN_LED, LOW);
delay(500);
digitalWrite(PIN_LED, HIGH);
delay(500);
digitalWrite(PIN_LED, LOW);
delay(500);
digitalWrite(PIN_LED, HIGH);
delay(500);
digitalWrite(PIN_LED, LOW);
delay(500);
counter=1;
}
}
uj5u.com熱心網友回復:
讓我們分步看看你的 while 回圈:
if ((counter==1) && (digitalRead(PIN_BUTTON))) {
digitalWrite(PIN_LED, HIGH);
counter ;
}
最初,計數器是 1,但沒有按下引腳,所以這不會做任何事情。
if ((counter==2) && (digitalRead(PIN_BUTTON))){
// ...
}
計數器不是 2,所以這也不會做任何事情。
if ((counter==3) && (digitalRead(PIN_BUTTON))){
// ...
}
同樣在這里。所以只要不按下按鈕,什么都不會發生。
現在當你按下按鈕時,它變得有趣:
if ((counter==1) && (digitalRead(PIN_BUTTON))) {
digitalWrite(PIN_LED, HIGH);
counter ;
}
現在滿足這個條件。LED 亮起,計數器遞增。
if ((counter==2) && (digitalRead(PIN_BUTTON))){
// ...
}
現在...這是真的也。由于按鈕仍然被按下(你不能那么快松開它),這也立即成立。現在將計數器增加到 3。
if ((counter==3) && (digitalRead(PIN_BUTTON))){
// ...
}
現在...?是的。這也是現在如此。所以它立即開始閃爍。
您必須做的(例如)是在每個條件之后等待按鈕不被按下:
if ((counter==1) && (digitalRead(PIN_BUTTON))) {
digitalWrite(PIN_LED, HIGH);
counter ;
while (digitalRead(PIN_BUTTON)); // Wait until button depressed.
}
備注:雖然這在概念上有效,但您應該考慮使用事件代替。忙等待是一種反模式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363023.html
下一篇:將決議的元素從文本檔案添加到陣列
