BluetoothSerial an neue Klasse übergeben

Hallo,
Irgendwie komme ich nicht so richtig weiter. Ich habe im Main-Program eine Bluetooth-Schnittstelle deklariert welche problemlos funktioniert. Jetzt habe ich einige Sensorklassen geschrieben, welche die Daten einsammeln und dann mittels Bluetooth senden. Bei der Klasse EWD benötigt ich jedoch die Bluetooth-Schnittstelle um die Sensoren zu kalibrieren. Dabei befindet sich die Methode solange in einer do/while schleife, bis erneut ein Zeichen über Bluetooth empfangen wird.
Wie kriege ich die Bluetooth-Schnittstelle an die Klasse EWD oder bestenfalls nur an die Methode "calibrateSensor" der Klasse EWD übergeben?
Bei dem Code kriege ich einen Compiler-Fehler in EWD.h "BluetoothSerial has not been declared".

//Main-Program

BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("Air"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");

}

void loop() {

...
    if(ewd.calibrateSensor(1,&SerialBT));
....
//EWD.h

class EWD{
	
public:
....
  bool calibrateSensor(int sensor, BluetoothSerial& btserial);

};
//EWD.cpp

bool EWD::calibrateSensor(int sensor, BluetoothSerial &btserial){

String btMessage;
 
      do{
     if (btserial.available()){           // Daten liegen an
     btMessage = btserial.readString();
  
      calSteps++;
      btMessage="";
          }
      }while (calSteps<=6); 
    }

Da bei Deinen Fragmenten die Includes fehlen, kann man da wenig zu sagen.
Außerdem glaube ich, dass Du Pointer und Referenzen durcheinander bringst.
Du musst in der EWD.h auf alle Fälle die BluetoothSerial includieren.

Gruß Tommy

 bool calibrateSensor(int sensor, BluetoothSerial& btserial);

// ...

if(ewd.calibrateSensor(1,&SerialBT));

Stimmt mich komisch....

Vorschlag (ohne dein Problem wirklich verstanden zu haben)

bool calibrateSensor(int sensor, Stream &serial);

// und dann später:
if(ewd.calibrateSensor(1,SerialBT));

combie:
Stimmt mich komisch....

Was soll daran komisch sein? Dann kann man halt nur Objekte dieser Klasse übergeben. Stream als Oberklasse aller Serial-Klassen hat natürlich den Vorteil dass die eigentliche Quelle egal ist. Das geht sowohl mit Software- als auch Hardware-Serial Klassen

Der Fehler mit "BluetoothSerial has not been declared" liegt vielleicht eher daran dass dass man die Klasse im Header auch inkludieren müsste

Was soll daran komisch sein?

Alle male dieses:

if(ewd.calibrateSensor(1,&SerialBT));

besser:

if(ewd.calibrateSensor(1,SerialBT));

Ob das überflüssige & Auswirkungen hat, nicht getestet.
Aber überflüssig, ist eben auch eine Form von falsch.

Ich kann nur das anmerken, was ich in dem Fragmenten sehe.

Der Stream ist nur ein Goodie dabei.


Dass MBard große Teile ausblendet, ist schade, denn genau das verhindert den Überblick auf die Stellen, wo die Böcke stecken.

if(ewd.calibrateSensor(1,&SerialBT));

Das ist natürlich falsch. Aber das ist auch nicht was du zitierst hast. Die Funktion selbst war im Prinzip korrekt

Zitat konkretisiert.