首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cpp/PlatformIO类依赖项

cpp/PlatformIO类依赖项
EN

Stack Overflow用户
提问于 2018-11-17 13:56:01
回答 1查看 437关注 0票数 0

我正在增加一个arduino项目,增加一个外部模拟数字转换器。

为此,我正在使用Mcp3208库。我的代码是用一个传感器组织的,我需要从不同的类访问Mcp3208实例(adc)。

因此,我在不同的类中创建了一个通用的lib包含,但这是行不通的。我在网上搜索了几个小时,但我还没有找到一篇文章来帮助我。

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

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

代码语言:javascript
复制
#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):

代码语言:javascript
复制
#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):

代码语言:javascript
复制
#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是相等的:

代码语言:javascript
复制
#include "Arduino.h"
#include "EnvironmentalSensor.h"
#include "commons.h"

MCP3208 adc;

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

下面是环境类(.h)的一个示例,PowerSensor是相等的:

代码语言:javascript
复制
#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:错误:调用‘for 3208::for 3208()’MCP3208 adc的命名函数; ^ lib/Power/src/Power.cpp:38:9:注意:候选人是:在lib/Commons.h:4:0的文件中,lib/Power/src/Power.h:33, 从lib/Power/src/Power.cpp:34:.piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:74:3:注:src 3208::src 3208(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:注释::spi 3208::spi 3208(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:注释:.piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7:3208::MCP3208 3208(const 3208&)类MCP3208{ ^ .piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7:注释:候选人期望一个参数,0提供.piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7:注释:.piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7: 3208::MCP3208 3208(MC3208&).piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:16:7:注释:候选人期望一个参数,0提供

但是对我来说,我已经在commons.cpp中声明了

谢谢你,吉鲁

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-17 15:20:38

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

代码语言:javascript
复制
extern MCP3208 adc;

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

代码语言:javascript
复制
MCP3208 adc(ADC_VREF, SPI_CS);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53351875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档