我有一些代碼,我想投入它使用另一個庫,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聽起來更像是一個名字空間的名字,而不是一個類... –