如何在模拟电路时使 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?

你有两个错误。

  1. 每次执行 loop 时,您都会用 digitalWrite(leds[counter], HIGH); 打开 LED。将该函数调用移到 if 语句中,这样它只会在按下按钮时执行。否则,绿色 LED leds[0] 会在您第一次按下按钮之前亮起。也不需要在每次调用循环时打开 LED。在条件语句中执行一次就足够了。

  2. 您的计数器在您将其重置为 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;
  }