我在Arduino项目中使用Adafruit BME280 Library
库。
它有一行:
#define BME280_ADDRESS (0x77)
实际地址为0x76
,但0x77
是在库的内部定义的:
https://github.com/adafruit/Adafruit_BME280_Library/blob/master/Adafruit_BME280.h#L37
如何在不派生库或更改其代码的情况下设置0x76
的值?
P.S。我使用lib_deps
中的PlatformIO
来管理我的依赖项。
更新:该代码(在#include
块之后)不起作用:
#undef BME280_ADDRESS
#define BME280_ADDRESS (0x76)
答案 0 :(得分:2)
也许您可以使用#undef BME280_ADDRESS
取消该宏。
#undef
仅影响#undef
下面的代码。因此,如果在不同文件中使用它,则应将其添加到所使用的每个文件中。
如果该库已经编译过,更改宏的唯一方法是重新编译它。
答案 1 :(得分:2)
您可以使用预处理器指令来执行此操作,如other answer中所述。
另一个选择就是简单地使用您自己的代码进行编译。在repo中,该库仅是两个文件,即Adafruit_BME280.h
/ Adafruit_BME280.cpp
。您可以简单地更改宏并按原样使用它。除非您自己将其编译为动态lib,否则它将静态链接到您的应用程序。
但是,您无需执行任何操作,因为Adafruit_BME280::begin()
函数有不同的重载,可用来提供自己的自定义addr
值。
Adafruit_BME280.h
文件(第#202-203行):
bool begin(uint8_t addr);
bool begin(uint8_t addr, TwoWire *theWire);
此外,请检查examples以获得进一步的了解。
答案 2 :(得分:0)
该问题被低估了,因为它似乎与其他问题相似,但事实并非如此:我无法undef
从另一个第三方对象中进行变量。
解决方案是在构建步骤中使用动态构建标志:!python extra_script.py
这是一个肮脏的解决方案,但已通过身份验证,不需要任何手动操作。仅git clone
并在IDE中按下构建按钮。