2017-08-07 21 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!我编辑了我的问题。一探究竟! –