如何在模拟电路时使 LED 初始关闭?
How can I make the LED initially off upon simulating the circuit?
activity 说:使用触觉开关创建一个程序,第一次按下绿色 LED 灯,第二次按下橙色或黄色 LED,第三次按下红色 LED。按三下后,开关应重置为绿色 LED。
这是我在 Tinkercad 中的代码。我们正在使用 C++ 语言。
int leds[3] = {4, 3, 2};
int button = 5;
int counter = 0;
void setup()
{
for (int i = 0; i < 4; i++)
{
pinMode(leds[i], OUTPUT);
}
pinMode(button, INPUT);
}
void loop()
{
int status = digitalRead(button);
if(status == HIGH)
{
delay(150);
digitalWrite(leds[counter], LOW);
counter++;
if (counter > 3)
{
counter = 0;
}
}
digitalWrite(leds[counter], HIGH);
}
activity 说按下按钮后绿色 LED 应该亮起,但我的电路中的绿色 LED 在我开始模拟它时最初是亮着的。我应该怎么做才能使 LED 最初关闭?
This is my circuit
We're using C language.
不,这不是 C,而是 C++。
What should I do to make the LED initially off?
不要打开它。
在按下按钮之前,您打开 leds[0]
。
您只需在按下按钮时更改 LED 状态。
但是你在那个条件语句之外打开了 led。
编辑:
can you tell me on which part of the code did I made that mistake?
你有两个错误。
每次执行 loop
时,您都会用 digitalWrite(leds[counter], HIGH);
打开 LED。将该函数调用移到 if 语句中,这样它只会在按下按钮时执行。否则,绿色 LED leds[0]
会在您第一次按下按钮之前亮起。也不需要在每次调用循环时打开 LED。在条件语句中执行一次就足够了。
您的计数器在您将其重置为 0 之前达到 3。但是您的 leds
数组中只有 3 个元素。所以你可以使用的最大索引是 2
替换
counter++;
if (counter > 3)
{
counter = 0;
}
与
counter = (counter + 1) % 3;
最后一行代码:
digitalWrite(leds[counter], HIGH);
当循环第一次运行时,counter
等于零。 Arduino 是零索引的,因此当您调用 digitalWrite(leds[counter], HIGH)
时,您将第一个 LED 设置为高电平。
您可以设置一个“假”pin。
int leds[4] = {8, 4, 3, 2};
由于您没有使用引脚 8,因此它不会有任何效果。
或者,您可以使用引脚 0 和 使用 if 语句跳过该引脚:
int leds[4] = {0, 4, 3, 2};
...
if (counter > 0)
digitalWrite(leds[counter], HIGH);
您还需要更改这些行:
if (counter > 3)
{
counter = 1;
}
activity 说:使用触觉开关创建一个程序,第一次按下绿色 LED 灯,第二次按下橙色或黄色 LED,第三次按下红色 LED。按三下后,开关应重置为绿色 LED。
这是我在 Tinkercad 中的代码。我们正在使用 C++ 语言。
int leds[3] = {4, 3, 2};
int button = 5;
int counter = 0;
void setup()
{
for (int i = 0; i < 4; i++)
{
pinMode(leds[i], OUTPUT);
}
pinMode(button, INPUT);
}
void loop()
{
int status = digitalRead(button);
if(status == HIGH)
{
delay(150);
digitalWrite(leds[counter], LOW);
counter++;
if (counter > 3)
{
counter = 0;
}
}
digitalWrite(leds[counter], HIGH);
}
activity 说按下按钮后绿色 LED 应该亮起,但我的电路中的绿色 LED 在我开始模拟它时最初是亮着的。我应该怎么做才能使 LED 最初关闭?
This is my circuit
We're using C language.
不,这不是 C,而是 C++。
What should I do to make the LED initially off?
不要打开它。
在按下按钮之前,您打开 leds[0]
。
您只需在按下按钮时更改 LED 状态。 但是你在那个条件语句之外打开了 led。
编辑:
can you tell me on which part of the code did I made that mistake?
你有两个错误。
每次执行
loop
时,您都会用digitalWrite(leds[counter], HIGH);
打开 LED。将该函数调用移到 if 语句中,这样它只会在按下按钮时执行。否则,绿色 LEDleds[0]
会在您第一次按下按钮之前亮起。也不需要在每次调用循环时打开 LED。在条件语句中执行一次就足够了。您的计数器在您将其重置为 0 之前达到 3。但是您的
leds
数组中只有 3 个元素。所以你可以使用的最大索引是2
替换
counter++;
if (counter > 3)
{
counter = 0;
}
与
counter = (counter + 1) % 3;
最后一行代码:
digitalWrite(leds[counter], HIGH);
当循环第一次运行时,counter
等于零。 Arduino 是零索引的,因此当您调用 digitalWrite(leds[counter], HIGH)
时,您将第一个 LED 设置为高电平。
您可以设置一个“假”pin。
int leds[4] = {8, 4, 3, 2};
由于您没有使用引脚 8,因此它不会有任何效果。
或者,您可以使用引脚 0 和 使用 if 语句跳过该引脚:
int leds[4] = {0, 4, 3, 2};
...
if (counter > 0)
digitalWrite(leds[counter], HIGH);
您还需要更改这些行:
if (counter > 3)
{
counter = 1;
}