我通过添加一个外部模数转换器来增加一个 arduino 项目。
为此,我正在使用 Mcp3208 库。我的代码是按传感器组织的一类,我需要从不同的类访问 Mcp3208 实例(adc)。
所以我在不同的类中创建了一个公共库,但这不起作用。我在网上搜索了几个小时,但我还没有找到可以帮助我的文章。
你能解释一下正确的方法吗?我正在使用 Atom 和 platformIO 插件进行编码。
我有一个实例化传感器 (.h) 的 FSM 类:
#ifndef FSM_H_
#define FSM_H_
#include "EnvironmentalSensor.h
#include "PowerSensor.h"
class FSM {
FSM();
virtual ~FSM();
public:
do_stuff();
private:
EnvironmentalSensor envSensor1(params);
PowerSensor envSensor1(params);
}
#endif
通用类将 Mcp3208 实例化为 adc (.h):
#ifndef COMMONS_H_
#define COMMONS_H_
#include "Mcp3208.h"
#define SPI_CS 29 // SPI slave select
#define ADC_VREF 5000 // 5V Vref
#define ADC_CLK 1600000 // SPI clock 1.6MHz
#define ADC_2_5 MCP3208::SINGLE_6
#endif /*COMMONS_H_ */
通用类(.cpp):
#include "Arduino.h"
#include "commons.h"
extern MCP3208 adc(ADC_VREF, SPI_CS);
void init_adc(){
pinMode(SPI_CS, OUTPUT); // set spi cs as an output pin
}
这是环境类 (.cpp) 的示例,PowerSensor 是相等的:
#include "Arduino.h"
#include "EnvironmentalSensor.h"
#include "commons.h"
MCP3208 adc;
void EnvironmentalSensor::read(){
adc.read(SINGLE_0);
}
这是环境类 (.h) 的示例,PowerSensor 是相等的:
#ifndef EnvironmentalSensor_H_
#define EnvironmentalSensor_H_
#include "commons.h"
class EnvironmentalSensor{
public :
read();
}
#endif
编辑 :
问题是:在 EnvironmentalSensor.cpp 中,mcp3208 adc 给我一个错误。
错误窗口为我提供了一些帮助:
error:lib/EnvironmentalSensor/src/EnvironmentalSensor.cpp:49:10: error: nomatching function for call to 'MCP3208::MCP3208()' MCP3208 adc;
^
lib/Power/src/Power.cpp:38:9:注意:候选人是:在 lib/commons/commons.h:4:0 包含的文件中,来自 lib/Power/src/Power.h:33,
从 lib/Power/src/Power.cpp:34: .piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:74:3: 注意:MCP3208::MCP3208(uint16_t, uint8_t) MCP3208(uint16_t vref, uint8_t csPin);
^
.piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:74:3:注意:候选人需要 2 个参数,提供 0 .piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:65:3:注意:MCP3208::MCP3208(uint16_t, uint8_t, SPIClass*) MCP3208(uint16_t vref, uint8_t csPin, SPIClass *spi);
^
.piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:65:3:注意:候选人需要 3 个参数,提供 0 .piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7:注意:constexpr MCP3208::MCP3208(const MCP3208&)类 MCP3208 {
^
.piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7:注意:候选人需要 1 个参数,提供 0 .piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7:注意:constexpr MCP3208::MCP3208(MCP3208&&)。 piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7:注意:候选人需要 1 个参数,提供 0
但对我来说,我已经在 commons.cpp 中声明了 adc
谢谢你,吉卢