Зависимости класса 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; cs)
^
.piolibdeps / Mcp3208_ID1533 / src / Mcp3208.h: 74: 3: примечание: кандидат ожидает 2 аргумента, при условии 0.piolibdeps/Mcp3208_ID1533/src/Mcp3208.h:65:3: примечание: MCP3208:: MCP3208 (uint16_t, u8 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 (MCP3208 & MCP. 320) piolibdeps / Mcp3208_ID1533 / src / Mcp3208.h: 16: 7: примечание: кандидат ожидает 1 аргумент, 0 предоставлено
Но для меня, я уже объявил АЦП в commons.cpp
Спасибо, гилоу
1 ответ
В вашем.h файле добавьте объявление:
extern MCP3208 adc;
В вашем файле.cpp добавьте определение:
MCP3208 adc(ADC_VREF, SPI_CS);