我有一些代码,我想投入它使用另一个库,SoftwareSerial库。现在我将SoftwareSerial.h和SoftwareSerial.cpp文件添加到我创建的库所在的文件夹中。创建一个图书馆一个Arduino
我的头文件看起来是这样的:
#ifndef MyLibrary_h
#define MyLibrary_h
#include "Arduino.h"
#include "SoftwareSerial.h"
#define MyLibrary_VERSION 1 // software version of this library
//DEFINE ALL CLASS VARIABLES
#define DATA_BUFFER_SIZE 50 //soft serial has 63 byte buffer.
class MyLibrary
{
public:
MyLibrary(uint8_t port_in, uint8_t port_out);
float getSomeValue(uint8_t some_index);
private:
SoftwareSerial _serial;
//Not sure if I should add the constructors below to the above declaration.
//(uint8_t in_pin=4, uint8_t out_pin=5, bool logic_reversed = false);
float convertSomeValue(byte upperbyte, byte lowerbyte);
void flushSerialBuffer();
};
#endif
我.cpp文件看起来是这样的:
#include "Arduino.h"
#include "MyLibrary.h"
#include "SoftwareSerial.h"
MyLibrary::MyLibrary(uint8_t in_pin, uint8_t out_pin)
{
bool logic_reversed = false;
this->_serial(in_pin*, out_pin*, logic_reversed);
//I tried the declaration below as well.
//SoftwareSerial _serial(in_pin*, out_pin*, logic_reversed);
}
float MyLibrary::getSomeValue(uint8_t sensor_index) {
float someValue = 1.1;
return someValue;
}
float MyLibrary::convertSome(byte upperbyte, byte lowerbyte) {
float someValue = 0.9;
return someValue;
}
void MyLibrary::flushSerialBuffer() {
//Flush serial buffer
while(_serial.available())
char c = _serial.read();
}
我想SoftwareSerial是在在MyLibrary(最好是静态的,但不是私人领域必要),但我已经尝试了很多是宣布它,但似乎没有任何工作。我不断收到类似no matching function for call to 'SoftwareSerial::SoftwareSerial()
或invalid use of qualified-name 'MyLibrary::_serial'
的错误。
我通过在我的.h文件中声明static SoftwareSerial _serial;
,并在我的.cpp文件的顶部声明SoftwareSerial MyLibrary::_serial(4,5,false);
来编译好。问题是,我想设置的_serial
端口在我的构造函数在MyLibrary(这样我就可以创建一个使用特定的输入/输出引脚SoftwareSerial一个在MyLibrary),而不是让他们在.cpp文件的顶部显式声明。
我对C编码和Arduino不是很熟悉,所以如果有人能向我解释如何在.h文件中正确地声明这些文件并将它们与MyLibrary构造函数中的正确端口一起实例化或一个MyLibrary.begin()函数(或类似的东西)。
预先感谢您有益意见。
太感谢你了,这正是我一直在寻找,这工作得很好对在MyLibrary的构造函数初始化SofwareSerial。为了完整起见,如果我在头文件中声明它为'static SoftwareSerial _serial;',我将如何初始化它?这是甚至用静态变量的好习惯吗?在构造函数中初始化它们对我来说看起来不太合适。 – methodMan
我假设你的意思是一个静态成员变量?在这种情况下,您需要选择一个.cpp文件,您希望该对象“存活”并使用“SoftwareSerial DataLogger :: _ serial(a,b);'。 –
对不起'MyLibrary :: _ serial(a,b)'。虽然MyLibrary听起来更像是一个名字空间的名字,而不是一个类... –