【问题标题】:How to call a void function within if statement (Arduino)如何在 if 语句中调用 void 函数(Arduino)
【发布时间】:2026-01-10 19:40:01
【问题描述】:

我编写了一个代码应该执行以下操作:如果我在循环void btnpress() 中按下一个按钮,程序将被发送到另一个函数void blink2(),然后一个 LED 亮起,3 秒后 LED 应该亮关闭,它也应该通过btnpress(); 再次返回到void btnpress()。 问题是,如果我按下按钮并释放,LED 会继续并保持无限亮,程序似乎没有执行以下最后部分 digitalWrite(LED_BUILTIN, LOW);btnpress();

const int btnpin = 9;
int btnstate = 0;
unsigned long currentTime;
unsigned long previousTime;
const long period = 3000;

// the setup
void setup()
{
    pinMode(LED_BUILTIN, OUTPUT);
    pinMode(btnpin, INPUT);
    Serial.begin(9600);
}

// the loop
void loop()
{
    btnpress();
}

void btnpress()
{
    Serial.println("Press button");
    delay(500);
    btnstate = digitalRead(btnpin);
    if (btnstate == HIGH) {
        previousTime = millis();
        blink2();
    }
}

void blink2()
{
    if (currentTime - previousTime >= period) {
        Serial.println("Led on");
        previousTime = currentTime;
        digitalWrite(LED_BUILTIN, HIGH); // turn the LED on
    }
    else {
        Serial.println("Led off");
        digitalWrite(LED_BUILTIN, LOW);
        btnpress();
    }
}

【问题讨论】:

  • 我根本看不到currentTime 的更新位置?
  • 顺便说一句,适当的缩进是个好主意。
  • @NateEldredge 我该怎么做?
  • 如果您希望其他人阅读您的代码,正确的缩进是一个好主意,这似乎是您现在所处的情况。这种格式会损害您获得帮助的机会。
  • 粘贴您的代码here,点击“格式化”,您的代码将得到很好的格式化。

标签: c++ loops if-statement arduino void


【解决方案1】:

如果我在循环 void btnpress() 中按下一个按钮,程序是 发送到另一个函数 void blink2(),然后一个 LED 继续亮起 3 秒后,led 应该熄灭,并且它也应该返回 void btnpress() 再次通过 btnpress();

根据此声明,我建议您使用以下代码来确定您的功能是否按照您的要求运行。

const int btnpin = 9;
int btnstate = 0;
//unsigned long currentTime;
//unsigned long previousTime;
const long period = 3000;

// the setup
void setup()
{
    pinMode(LED_BUILTIN, OUTPUT);
    pinMode(btnpin, INPUT);
    Serial.begin(9600);
}

// the loop
void loop()
{
    btnpress();
}

void btnpress()
{
    Serial.println("Press button");
    delay(500);
    btnstate = digitalRead(btnpin);
    if (btnstate == HIGH) {
       // previousTime = millis();
        blink2();
    }
}

void blink2()
{
        Serial.println("Led on");
        digitalWrite(LED_BUILTIN, HIGH);
        delay(3000);

        Serial.println("Led off");
        digitalWrite(LED_BUILTIN, LOW);
        //btnpress(); It's already inside the Void loop            
}

如果它运行良好,那么函数调用就可以了。 并且“如何在 if 语句(Arduino)中调用 void 函数”没有问题

问题可能在你的 if 语句中,

if (currentTime - previousTime >= period) {
        Serial.println("Led on");
        previousTime = currentTime;
        digitalWrite(LED_BUILTIN, HIGH); // turn the LED on
    }

这里,currentTime 没有定义。

【讨论】:

  • 感谢您的回复,我已经找到了解决方案。无论如何感谢您的贡献。