cpp / PlatformIO类依赖项

时间:2018-11-17 13:56:02

标签: c++ arduino platformio

我正在通过添加外部模数转换器来增加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

谢谢你, 吉洛

1 个答案:

答案 0 :(得分:0)

在您的.h文件中,添加声明:

extern MCP3208 adc;

在您的.cpp文件中,添加定义:

MCP3208 adc(ADC_VREF, SPI_CS);