Hallo,
ich arbeite derzeit an einem Master-Clients - System für eine kleine Heimautomation. Dafür habe ich eine erste Fassung erstellt.
Die uC kommunizieren über nrf24L01+ miteinander. Dazu verwende ich die Bibliotheken RF24, -Network und -Mesh.
Der Compiler wirft mir beim Übersetzen Fehler, mit denen ich wenig anfangen kann. Es macht den Anschein, dass ich die Konstruktoren nicht korrekt anspreche(?)
Kurze Beschreibung zum Code:
- Clients werden immer mit dem Objekt HA arbeiten, der Master mit dem abgeleiteten ServerFunctions.
- Meist arbeite ich mit vMicro für VisualStudio, für die Tests habe ich die Direktiven aber erstmal auskommentiert.
- Die Klassen sind über die Bibliothek eingebunden (liegen bei mir also im Ordner libraries).
Ich verwende einen Uno für den Master, die Clients bekommen einen Pro Mini.
Der Code ist vereinfacht und auf das beschränkt, wo die Fehler auftreten.
HA.h
#include <Arduino.h>
#include <RF24.h>
#include <RF24Network.h>
#include <RF24Mesh.h>
#include <Ethernet.h>
#ifndef values
#define values
//Requestschema vom µC:
//http://192.168.0.9/Client/SubControl/Action
// ^Addresse immer gleich
// ^entspricht dem Wert von eHANodeTypes
// Wenn der Wert -1 übergeben wurde, wird nichts gesetzt, sondern die Status aller Clienten zurück gegeben
// ^Identifier, falls Client mehrere Objekt verwaltet
// ^Wert, der gesetzt werden soll. Sollte irgendetwas zwischen 0 und 100 sein.
// Wenn der Wert -1 übergeben wurde, wird nichts gesetzt, sondern nur der Status ausgelesen
//#define master 1
//#define woodlamp 1
//#define flexenlamp 1
//#define corridornight 1
//#if not defined master
//#define MESH_NOMASTER
//#endif
//
//#if ((defined woodlamp || defined flexenlamp || defined corridornight) && defined master ) || (!defined woodlamp && !defined flexenlamp && !defined corridornight && !defined master)
//return;
//#endif
//Definiert die Stationarten.
//Danach richtet sich, wie sich der Knoten verhält (Server oder Client)
enum eHANodeTypes { Master, Woodlamp, Flexenlamp, CorridorNight };
//Definiert die Funktionsmodi.
enum eHANodeModes { Server, Client };
//Definiert die Anfragetypen für Knoten
//Werte setzen oder Werte auslesen
enum eHARequestCommand { Set, Read };
//Strukt mit Anfragetyp, Sonderanfrage und neuem Wert.
struct sHARequest {
eHARequestCommand command;
//Sonderanfrage - für den Fall, dass ein Knoten unterschiedliche Ziele/Funktionen hat.
char subControl;
byte value;
};
//Strukt mit dem akutellen Zustand eines Knotens.
// hardState ist 0 oder 1
// softState zeigt den tatsächlichen Wert
// percentageState zeigt den Wert prozentual im möglichen Wertebereich
// outputPin ist der physisch verwendete Ausgang am uC
struct sHAControlState {
char subControl;
bool hardState;
byte softState;
byte percentageState;
int outputPin;
};
class HA
{
private:
sHAControlState controlState;
public:
RF24 radio;
RF24Network network;
RF24Mesh mesh;
eHANodeModes mode;
eHANodeTypes type;
//Die letzte Stelle wird durch den INT-Wert des eHANodeTypes ersetzt.
byte macAddress[6] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x00 };
HA(eHANodeTypes nodeType);
// void Update();
// void SetStates(sHARequest *newState);
// void CalcRequestToState(sHARequest *newState, sHAControlState* stateObject);
// void SendData(sHAControlState* values);
// void printSerial(String text, bool newLine);
};
//#ifdef master
class ServerFunctions : public HA {
private:
EthernetServer server;
byte ipAddress[4] = { 192, 168, 0, 0 };
public:
ServerFunctions(eHANodeTypes nodeType);
// void Update();
// void ForewardRequest(eHANodeTypes nodeTypeNumber, String requestString);
// //sHARequest BuildHARequest();
// void SendData(sHARequest* values, int nodeID);
// sHAControlState getStates(eHANodeTypes nodeTypeNumber, char subControl);
// String getStatesEthernetResponse(eHANodeTypes nodeTypeNumber, char subControl);
// uint16_t GetNodeAddressByID(int nodeID);
// String getValueAtIndex(String data, char separator, int index);
};
//#endif
#endif
HA.cpp
#include <Arduino.h>
#include <HA.h>
#include <RF24.h>
#include <RF24Network.h>
#include <RF24Mesh.h>
#include <Ethernet.h>
HA::HA(eHANodeTypes nodeType)
{
type = nodeType;
mode = (nodeType == Master ? Server : Client);
macAddress[5] = (int)nodeType;
radio(7, 8);
network(radio);
mesh(radio, network);
mesh.setNodeID(nodeType);
mesh.begin();
}
ServerFunctions::ServerFunctions(eHANodeTypes nodeType) : HA(nodeType) {
server = EthernetServer(80);
Ethernet.begin(macAddress, ipAddress);
server.begin();
}
automation_oop.ino
#include <RF24.h>
#include <RF24Network.h>
#include <RF24Mesh.h>
#include <Ethernet.h>
#include <SPI.h>
#include <HA.h>
//#ifdef master
ServerFunctions automation(Master);
//#else
//#if defined woodlamp
//HA automation(Woodlamp);
//#elif defined flexenlamp
//HA automation(Flexenlamp);
//#elif defined corridornight
//HA automation(CorridorNight);
//#endif
//#endif
void setup()
{
}
void loop()
{
//automation.Update();
}
Der erste Block der Fehlermeldungen sieht wie im Folgenden aus. Die gesamte Ausgabe befindet sich im Anhang.
C:\Users\[xxx]\Documents\Arduino\libraries\HA\HA.cpp: In constructor 'HA::HA()':
C:\Users\[xxx]\Documents\Arduino\libraries\HA\HA.cpp:8:8: error: no matching function for call to 'RF24::RF24()'
HA::HA()
^
C:\Users\[xxx]\Documents\Arduino\libraries\HA\HA.cpp:8:8: note: candidates are:
In file included from C:\Users\[xxx]\Documents\Arduino\libraries\HA/HA.h:2:0,
from C:\Users\[xxx]\Documents\Arduino\libraries\HA\HA.cpp:2:
C:\Users\[xxx]\Documents\Arduino\libraries\RF24/RF24.h:124:3: note: RF24::RF24(uint16_t, uint16_t, uint32_t)
RF24(uint16_t _cepin, uint16_t _cspin, uint32_t spispeed );
^
C:\Users\[xxx]\Documents\Arduino\libraries\RF24/RF24.h:124:3: note: candidate expects 3 arguments, 0 provided
C:\Users\[xxx]\Documents\Arduino\libraries\RF24/RF24.h:110:3: note: RF24::RF24(uint16_t, uint16_t)
RF24(uint16_t _cepin, uint16_t _cspin);
^
C:\Users\[xxx]\Documents\Arduino\libraries\RF24/RF24.h:110:3: note: candidate expects 2 arguments, 0 provided
C:\Users\[xxx]\Documents\Arduino\libraries\RF24/RF24.h:51:7: note: constexpr RF24::RF24(const RF24&)
class RF24
^
C:\Users\[xxx]\Documents\Arduino\libraries\RF24/RF24.h:51:7: note: candidate expects 1 argument, 0 provided
C:\Users\[xxx]\Documents\Arduino\libraries\RF24/RF24.h:51:7: note: constexpr RF24::RF24(RF24&&)
C:\Users\[xxx]\Documents\Arduino\libraries\RF24/RF24.h:51:7: note: candidate expects 1 argument, 0 provided
Wo liegt mein Fehler?
Wenn noch Informationen benötigt werden, dann einfach Bescheid geben.
![]()
Achja - und schlagt mit bitte einen besseren Namen für das Thema vor. Mit fiel kein besserer ein.
errorMessages.txt (14.2 KB)