私はイーサネットシールドを使用してArduinoを使用しています。サーバーオブジェクトを宣言する通信クラスを作成しました(イーサネットライブラリから)。ここで、クラス コンストラクターでこのオブジェクトを初期化します。オブジェクトのコンストラクターは、1 つのパラメーター (int ポート番号) を取ります。
行ったことは次のとおりです。
ヘッダー ファイルでは、サーバー オブジェクトをポインター (*Server) として宣言します。
EthernetServer *ServerObject;
そして、コミュニケーター クラス コンストラクターで、次のようにオブジェクトを初期化します。
*ServerObject = EthernetServer(5000);
問題は、ServerObject のコンストラクターが常にパラメーターを必要とするため、ヘッダーファイルで単純に宣言できないことです。
ヒントやヘルプは大歓迎です!前もって感謝します!
通信クラスのヘッダー ファイルは次のようになります。
class CommunicationModuleTCPIP : public CommunicationModule
{
public:
CommunicationModuleTCPIP(byte MacAdress[], IPAddress ServerIPServerIPAdress, int ServPort, bool Server);
CommunicationModuleTCPIP();
int Connect();
void Send();
void Recieve();
void SendBuffer(char Buffer[], int Size);
void RecieveBuffer(char Buffer[], int Size);
byte Mac[];
IPAddress ServerIP;
int ServerPort;
EthernetClient Client;
EthernetServer *ServerObject;
private:
};
そして、クラス コンストラクターは次のようになります。
Serial.begin(9600);
delay(1000);
char Buffer[10];
Serial.println("Setting up server");
// the router's gateway address:
byte gateway[] = { 192, 168, 1, 1 };
// the subnet:
byte subnet[] = { 255, 255, 255, 0 };
*ServerObject = EthernetServer(5000);
//Mac = byte[] { 0x90, 0xA2, 0xDA, 0x0D, 0xA4, 0x13 }; //physical mac address
for (int Index = 0; Index < 6; Index++) {
Mac[Index] = MacAdress[Index];
};
ServerIP = ServerIPAdress; // IP Adress to our Server
ServerPort = ServPort;
// initialize the ethernet device
Ethernet.begin(Mac, ServerIP, gateway, subnet);
// start listening for clients
this.ServerObject.begin();
Serial.println("Server setup");
// if an incoming client connects, there will be bytes available to read:
Client = ServerObject.available();
if (Client.connected()) {
Serial.println("client connected");
// read bytes from the incoming client and write them back
// to any clients connected to the server:
RecieveBuffer(Buffer, 10);
Serial.print(Buffer);
}
アップデート
Craig の提案を試した後、いくつかの新しいコンパイラ エラーが発生します。
しかし、いいえ、次のエラーが発生しました: C:\Users\Gebruiker\Documents\Arduino\libraries\CommunicationModule\CommunicationModuleTCPIP.cpp:12: error: no matching function for call to 'EthernetServer::EthernetServer()' C:\Program Files (x86)\Arduino\libraries\Ethernet/EthernetServer.h:14: 注意: 候補は EthernetServer::EthernetServer(uint16_t) C:\Program Files (x86)\Arduino\libraries\Ethernet/EthernetServer.h:9: 注意: EthernetServer::EthernetServer(const EthernetServer&)
これを解決する方法はありますか?私の理解では、パラメーターのない Ethernetserver クラスのコンストラクターはありません。しかし、次のようにして、初期化リストでこのパラメーターを指定しています。
CommunicationModuleTCPIP:: CommunicationModuleTCPIP(byte MacAdress[], IPAddress ServerIPAdress, int ServPort, bool Server)
:ServerObject(5000)
{
// Code
}
誰かアイデアがありますか?