Зависимости класса cpp / PlatformIO

Я увеличиваю проект Arduino, добавив внешний аналого-цифровой преобразователь.

Для этого я использую библиотеку Mcp3208.
Мой код организован по одному классу по датчику, и мне нужен доступ к экземпляру Mcp3208 (adc) из разных классов.

Таким образом, я создал общее включение библиотеки в разных классах, но это не работает. Я искал от нескольких часов в сети, но я не нашел статью, чтобы помочь мне.

Можете ли вы объяснить мне правильный способ сделать это?
Я пишу с Atom и плагином platformIO.

У меня есть класс FSM, который создает экземпляры датчиков (.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

Общий класс создает экземпляр 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
}

Вот пример для класса Environmental (.cpp), PowerSensor равен:

#include "Arduino.h"#include "EnvironmentalSensor.h"#include "commons.h"
MCP3208 adc;

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

Вот пример для класса Environmental (.h), PowerSensor равен:

#ifndef EnvironmentalSensor_H_
#define EnvironmentalSensor_H_

#include "commons.h"
class EnvironmentalSensor{

public :
read();
}

#endif

редактировать :

Проблема в том, что в EnvironmentalSensor.cpp ADC mcp3208 выдает ошибку.

Окно ошибок предоставляет мне некоторую помощь:

ошибка: 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

Спасибо,
gilou

0

Решение

В вашем .h файле добавьте объявление:

extern MCP3208 adc;

В вашем файле .cpp добавьте определение:

MCP3208 adc(ADC_VREF, SPI_CS);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]