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