我尝试使用arduino库从github:https://github.com/LibreSolar/bq769x0-arduino-library/blob/master/bq769x0.h但它甚至不能编译。错误连接到:
#if BQ769X0_DEBUG
void printRegisters(void);
#endif
当我注释它时,它会编译,但我当然需要它来调试。我认为这是一个简单的问题,但是我没有太多的编程经验。请帮助。
我试着评论它,我认为它的工作,但我没有看到任何结果在串行监视器
这叫做"条件编译"。如果定义了预处理器值BQ769X0_DEBUG
,则声明并定义了bq769x0
类成员函数printRegisters
(即存在)。如果没有定义BQ769X0_DEBUG
,则该函数不存在,并且尝试调用它是一个错误。
如果要使用该函数,请在包含头文件之前定义它:
#define BQ769X0_DEBUG // Enable debug features
#include <bq769x0.h>
bq769x0 BMS(bq76920, BMS_I2C_ADDRESS);
我相当肯定这将工作在Arduino作为AFAIK,它不预编译库。
请注意,如果您决定通过不定义它来禁用调试功能:
// #define BQ769X0_DEBUG
#include <bq769x0.h>
bq769x0 BMS(bq76920, BMS_I2C_ADDRESS);
// BMS.printRegisters does not exist!
,以后调用该函数将会出错。要解决这个问题,您可以在代码中使用代码保护:
void loop()
{
BMS.update(); // should be called at least every 250 ms
#ifdef BQ769X0_DEBUG
BMS.printRegisters();
#endif
}
另一个选项是将库头从:
#if BQ769X0_DEBUG
void printRegisters(void);
#endif
#if BQ769X0_DEBUG
void printRegisters(void);
#else
void printRegisters(void) {}
#endif
在本例中,如果没有定义BQ769X0_DEBUG
,则创建printRegisters
函数,但不做任何事情。调用它不会导致错误。
#ifdef BQ769X0_DEBUG
#define PRINT_REGISTERS BMS.printRegisters()
#else
#define PRINT_REGISTERS
#endif
然后将用法改为:
void loop()
{
BMS.update(); // should be called at least every 250 ms
PRINT_REGISTERS;
}
注意:这个宏被硬编码为使用BMS
对象。需要修改才能使用其他的