其他引脚始终点亮
Other pins always lighting up
即使我还没有设置 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 除外)点亮。
所以,基本上,我想要我的代码实现的是点亮 1 个 LED(+1 LED),每点击 3 次按钮(引脚 2)。另一方面,我还希望它每点击三次按钮(引脚 3)关闭 1 个 LED(-1 LED)。但是,在点击之前,引脚 4 到 8 已经点亮(正如您在 void setup()
上看到的那样)。
在您的 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 以上。因此,您设置为输出的其他引脚通过按一次(无论多么短暂)按钮打开。
自己解决了问题...
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;
}
}
即使我还没有设置 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 除外)点亮。
所以,基本上,我想要我的代码实现的是点亮 1 个 LED(+1 LED),每点击 3 次按钮(引脚 2)。另一方面,我还希望它每点击三次按钮(引脚 3)关闭 1 个 LED(-1 LED)。但是,在点击之前,引脚 4 到 8 已经点亮(正如您在 void setup()
上看到的那样)。
在您的 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 以上。因此,您设置为输出的其他引脚通过按一次(无论多么短暂)按钮打开。
自己解决了问题...
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;
}
}