我正在通过添加外部模数转换器来增加arduino项目。
为此,我正在使用Mcp3208库。 我的代码按传感器按一类进行组织,因此我需要从不同的类访问Mcp3208实例(adc)。
因此,我在不同的类中创建了一个公共的lib包含,但这不起作用。我正在网上搜索几个小时,但没有找到一篇对我有帮助的文章。
您能解释一下正确的方法吗? 我正在使用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给我一个错误。
错误窗口为我提供了一些帮助:
错误:lib / EnvironmentalSensor / src / EnvironmentalSensor.cpp:49:10:错误:调用'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
谢谢你, 吉洛
答案 0 :(得分:0)
在您的.h文件中,添加声明:
extern MCP3208 adc;
在您的.cpp文件中,添加定义:
MCP3208 adc(ADC_VREF, SPI_CS);