gpt4 book ai didi

arduino - 如何为Arduino代码提供条件编译?

转载 作者:行者123 更新时间:2023-12-04 02:45:02 25 4
gpt4 key购买 nike

我正在编写基于 Arduino 的代码,我需要为串行命令提供条件编译以在串行终端上打印数据。

我在代码的开头使用“#define DEBUG”,如果它被定义,那么所有的串行打印命令都会被执行,并且串行监视器上会有数据,否则,它将跳过代码中的串行打印命令。

现在,我需要开发一个代码,让用户可以输入是否在代码中包含“#define DEBUG”语句,选择 Debug模式/非 Debug模式在串行终端上打印数据。意思是需要给条件编译语句提供条件。

下面是我的代码

 #define DEBUG         // Comment this line when DEBUG mode is not needed

void setup()
{
Serial.begin(115200);
}

void loop()
{
#ifdef DEBUG
Serial.print("Generate Signal ");
#endif

for (int j = 0; j <= 200; j++)
{
digitalWrite(13, HIGH);
delayMicroseconds(100);
digitalWrite(13, LOW);
delayMicroseconds(200 - 100);
}
}

目前,当我不需要在终端上打印串行命令时,我正在手动注释“#define DEBUG”语句。

请提出建议。

感谢和问候...

最佳答案

GvS 的回答很好。但是,如果您想在多个位置打印,那么使用大量 if 语句可能会降低可读性。您可能想要像这样定义一个宏函数。

#define DEBUG_ON 1
#define DEBUG_OFF 0
byte debugMode = DEBUG_OFF;

#define DBG(...) debugMode == DEBUG_ON ? Serial.println(__VA_ARGS__) : NULL

这样,您可以在没有 if 语句的情况下调用 DBG()。它仅在 debugMode 设置为 DEBUG_ON 时打印。

void loop() 
{
DBG("Generate Signal ");

for (int j = 0; j <= 200; j++)
{
DBG(j);
}
DBG("blah blah");
}

关于arduino - 如何为Arduino代码提供条件编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57554719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com