2017-08-07 35 views
-1

爲什麼其他引腳點亮,即使我還沒有設置digitalWrite(pin, HIGH);其他引腳總是點亮

我不知道是什麼讓其他引腳點亮LED。

這裏是我的代碼:

int x = 0, y = 0, i = 4; 

void setup() { 
    for (i = 4; i <= 13; i++) { 
    pinMode(i, OUTPUT); 
    } 
    for (i = 4; i <= 8; i++) { 
    digitalWrite(i, HIGH); 
    } 
    pinMode(2, INPUT); 
    pinMode(3, INPUT); 
} 

void loop() { 
    if (digitalRead(2) == HIGH) { 
    x += 1; 
    } 
    if (x == 3) { 
    i += 1; 
    digitalWrite(i, HIGH); 
    x = 0; 
    } 

    if (digitalRead(3) == HIGH) { 
    y -= 1; 
    } 
    if (y == 3) { 
    digitalWrite(i, LOW); 
    i -= 1; 
    y = 0; 
    } 
} 

我測試(不麪包板尚未...)通過Arduino板本身,並內置LED或LED_BUILTIN被照亮了,但光水平不是太高;它就像是變暗了。

現在,我使用麪包板通過手動將跳線連接到另一個引腳來測試它。所有的引腳都使LED點亮,但我不明白,因爲我的代碼不允許除引腳4到8之外的其他引腳點亮。因此,基本上,我想讓我的代碼實現,就是每點擊三次按鈕(引腳2)就點亮1個LED(+1 LED)。另一方面,我還希望它每關閉一次按鈕(引腳3)就關閉1個LED(-1個LED)。但是,在點擊之前,引腳4至8已經點亮(如您在void setup()上看到的那樣)。

+0

什麼樣的LED是您使用? – jikuja

+0

@jikuja你是什麼意思,種LED?是否有任何類型的LED?如果有的話,那麼我可能只是使用普通的或普通的紅色/黃色/綠色LED。 –

+0

'digitalWrite(i,HIGH)'和'digitalWrite(i,LOW)'將打開/關閉LED指示燈。你有連接pin'2'和'3'的東西嗎? – Sma

回答

0

解決自己的問題......

if (digitalRead(2) == HIGH) { 
    x += 1; 
} 

應該有x += 1;delay,像這樣:...

if (digitalRead(2) == HIGH) { 
    x += 1; 
    delay(200); 
} 

所以,x不應立即提高。

新代碼:

int x = 0, y = 0, i = 7; 

void setup() { 
    for (int a = 4; a <= 13; a++) { 
    pinMode(a, OUTPUT); 
    } 
    for (int a = 4; a <= 7; a++) { 
    digitalWrite(a, HIGH); 
    } 
    pinMode(2, INPUT); 
    pinMode(3, INPUT); 
} 

void loop() { 
    if (digitalRead(2) == HIGH) { 
    x += 1; 
    delay(200); 
    } 
    if (x == 3) { 
    i += 1; 
    digitalWrite(i, HIGH); 
    x = 0; 
    } 

    if (digitalRead(3) == HIGH) { 
    y += 1; 
    delay(200); 
    } 
    if (y == 3) { 
    digitalWrite(i, LOW); 
    i -= 1; 
    y = 0; 
    } 
} 
0

在你setup()您打開一束針:

for (i = 4; i <= 13; i++) { // set pins 4-13 up as outputs 
    pinMode(i, OUTPUT); 
} 
for (i = 4; i <= 8; i++) { // turn on 4,5,6,7, and 8 
    digitalWrite(i, HIGH); 

在循環中的代碼的其餘部分沒有采取任何措施將其關閉,使他們留在。

後來,假設你digitalRead()語句連接到推動一些按鈕,沒有延遲或其他機制來慢下來,下面的語句就可以執行速度比你可以控制:

i += 1; 
digitalWrite(i, HIGH); 

我敢打賭如果您檢查i的值,您會發現它們在測試條件下增加到8以上。因此,您設置爲輸出的其他引腳正在從單個(無論如何簡短)按鈕開啓。

+0

嘿,@TomServo!我編輯了我的問題。一探究竟! –