cpp/PlatformIO class 依赖关系

cpp/PlatformIO class dependencies

我正在通过添加一个外部模数转换器来增加一个 arduino 项目。

为此我使用了 Mcp3208 库。 我的代码由一个 class 传感器组织,我需要从不同的 classes.

访问一个 Mcp3208 实例 (adc)

所以我在不同的 classes 中创建了一个公共库,但这不起作用。我在网上搜索了几个小时,但没有找到可以帮助我的文章。

你能给我解释一下正确的方法吗? 我正在使用 Atom 和 platformIO 插件进行编码。

我有一个 FSM class 实例化传感器 (.h) :

#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

常见的class将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_ */

普通class (.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
}

这是环境 class (.cpp) 的示例,PowerSensor 等于:

#include "Arduino.h"
#include "EnvironmentalSensor.h"
#include "commons.h"

MCP3208 adc;

void EnvironmentalSensor::read(){
    adc.read(SINGLE_0);
}

这是环境 class (.h) 的示例,PowerSensor 等于:

#ifndef EnvironmentalSensor_H_
#define EnvironmentalSensor_H_

#include "commons.h"

class EnvironmentalSensor{

public :
    read();
}

#endif

编辑:

问题是:在 EnvironmentalSensor.cpp mcp3208 adc 中给我一个错误。

错误window 给我一些帮助:

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: note: candidates are: In file included from lib/commons/commons.h:4:0, from lib/Power/src/Power.h:33,

from lib/Power/src/Power.cpp:34: .piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:74:3: note: MCP3208::MCP3208(uint16_t, uint8_t) MCP3208(uint16_t vref, uint8_t csPin);

^

.piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:74:3: note: candidate expects 2 arguments, 0 provided .piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:65:3: note: MCP3208::MCP3208(uint16_t, uint8_t, SPIClass*) MCP3208(uint16_t vref, uint8_t csPin, SPIClass *spi);

^

.piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:65:3: note: candidate expects 3 arguments, 0 provided .piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7: note: constexpr MCP3208::MCP3208(const MCP3208&) class MCP3208 {

^

.piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7: note: candidate expects 1 argument, 0 provided .piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7: note: constexpr MCP3208::MCP3208(MCP3208&&) .piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7: note: candidate expects 1 argument, 0 provided

但对我来说,我已经在commons.cpp

中声明了adc

谢谢, 吉卢

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

extern MCP3208 adc;

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

MCP3208 adc(ADC_VREF, SPI_CS);