Arduino: SoftwareSerial inside eigene Klasse

(Firma: Q3) #7056971
Lesenswert?

Ich habe eine eigen Klasse zur Ansteuerung eines Bondruckers für den 
Arduino und ich hätte gerne, dass die zugehörige SoftwareSerial 
innherhalb dieser Klasse mit dem Konstruktor initialisiert wird ... 
bekomme es aber nicht hin und benötige Hilfe. Ich schreibe den Code mal 
so hin, wie er NICHT funktioniert, aber meine Absicht daraus erkennbar 
wird:
1
#include <SoftSerial.h>
2
class SCPrinter{
3
  private:
4
    SoftSerial serial;
5

6
  public:
7
  SCPrinter(int rx, int tx){
8
    serial = new SoftSerial(rx,tx);
9
  }
10
};
11

12
SCPrinter scprinter(10,11);
13
...
Gast #7057354
Lesenswert?

> Ne, sorry, die ist nicht besonders verständlich

Doch, ist sie. Ich weiß nämlich was im obigen Auszug falsch ist. Und 
wenn Du noch mehr Fehler drin hast als das was oben angegeben ist, dann 
würden wir uns mit einer hier angegebenen Lösung einfach nur im Kreis 
drehen, weil Du immer sagen würdest "die Lösung geht nicht, also benutze 
ich sie nicht, und ich zeig aber auch die Fehlermeldung nicht her, weil 
die ist geheim und die kann niemand verstehen, und außerdem muss der 
Fehler in obigem Codefragment sein, Hinweise auf andere Stellen 
ignoriere ich daher". Also zeig bitte die Fehlermeldungen (vollständig!) 
oder interpretiere sie selbst.

Nix für ungut.
#7057555
Lesenswert?

Frank E. schrieb:
> Ich schreibe den Code mal
> so hin, wie er NICHT funktioniert, aber meine Absicht daraus erkennbar
> wird

Allererste Grundregel bei solchen Fragen: zeige deinen echten und 
vollständigen Code, kein „irgendwie so ähnlich“ - Quatsch voller 
zusätzlicher Fehler.

Wie heißt die Klasse denn nun wirklich, die du benutzen willst? 
SoftSerial oder SoftwareSerial, oder ganz anders?

Oliver
#7057556
Lesenswert?

Frank E. schrieb:
> g457 schrieb:
>>> bekomme es aber nicht hin
>>
>> Kuckst Du Fehlermeldung, sagt Dir was falsch ist.
>>
>> HTH
>
> Ne, sorry, die ist nicht besonders verständlich ...

Wenn du sie nicht verstehst, heißt das nicht, dass sie niemand auf der 
Welt versteht. Wenn du Fehler vom Compiler bekommst und hier nachfragst, 
immer die Fehlermeldung posten und angeben, auf welche Zeile des Code 
sie sich bezieht.
(Firma: Q3) #7057653
Lesenswert?

1
#include <SoftwareSerial.h>
2

3
class SCPrinter
4
{
5
  private:
6
  SoftwareSerial serial;
7
  public:
8
  SCPrinter(int rx, int tx)
9
  { //<-- diese Zeile wird rosa markiert und es erscheint die Fehlermeldung
10
    serial = new SoftwareSerial(rx,tx,false);
11
  }
12
};
13

14
void setup(){}
15
void loop(){}

Fehlermeldung:

Arduino: 1.8.19 (Mac OS X), Board: "Arduino Uno"

/Users/frank/Documents/Arduino/softser_in_class/softser_in_class.ino: In 
constructor 'SCPrinter::SCPrinter(int, int)':
softser_in_class:9:3: error: no matching function for call to 
'SoftwareSerial::SoftwareSerial()'
   {
   ^
In file included from 
/Users/frank/Documents/Arduino/softser_in_class/softser_in_class.ino:1:0 
:
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:92:3:  note: candidate: 
SoftwareSerial::SoftwareSerial(uint8_t, uint8_t, bool)
   SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool 
inverse_logic = false);
   ^~~~~~~~~~~~~~
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:92:3:  note:   candidate 
expects 3 arguments, 0 provided
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:50:7:  note: candidate: 
constexpr SoftwareSerial::SoftwareSerial(const SoftwareSerial&)
 class SoftwareSerial : public Stream
       ^~~~~~~~~~~~~~
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:50:7:  note:   candidate 
expects 1 argument, 0 provided
softser_in_class:10:44: error: no match for 'operator=' (operand types 
are 'SoftwareSerial' and 'SoftwareSerial*')
     serial = new SoftwareSerial(rx,tx,false);
                                            ^
In file included from 
/Users/frank/Documents/Arduino/softser_in_class/softser_in_class.ino:1:0 
:
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:50:7:  note: candidate: 
SoftwareSerial& SoftwareSerial::operator=(const SoftwareSerial&)
 class SoftwareSerial : public Stream
       ^~~~~~~~~~~~~~
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:50:7:  note:   no known 
conversion for argument 1 from 'SoftwareSerial*' to 'const 
SoftwareSerial&'
exit status 1
no matching function for call to 'SoftwareSerial::SoftwareSerial()'


Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.
(Firma: Q3) #7057671
Lesenswert?

1
#include <SoftwareSerial.h>
2

3
class SCPrinter
4
{
5
  private:
6
  SoftwareSerial * serial; //<----
7
  ...
8
};

Wenn ich an der markierten Stelle ein Sternchen einfüge, wird ohne 
Fehler compiliert. Testen, ob es wirklich funktioniert, kann ich gerade 
nicht, habe keinen Arduino in Reichweite, das muss bis Montag warten.

Mit diesem Detail von C++ muss ich mich wohl noch befassen ... :-)
Gast #7057677
Lesenswert?

Frank E. schrieb:
> #include <SoftwareSerial.h>
> class SCPrinter
> {
>   private:
>   SoftwareSerial * serial; //<----
>   ...
> };
>
> Wenn ich an der markierten Stelle ein Sternchen einfüge, wird ohne
> Fehler compiliert. Testen, ob es wirklich funktioniert, kann ich gerade
> nicht, habe keinen Arduino in Reichweite, das muss bis Montag warten.
> Mit diesem Detail von C++ muss ich mich wohl noch befassen ... :-)

Mit new wird eine Instanz auf dem Heap angelegt, zurueck kommt ein 
Zeiger, also SoftwareSerial* und nicht wie bei dir ursprünglich 
SoftwareSerial

C++ Grundlagen und Pointer anschauen, new/delete usw.
#7057716
Lesenswert?

cppbert3 schrieb:
> Frank E. schrieb:
>> #include <SoftwareSerial.h>
>> class SCPrinter
>> {
>>   private:
>>   SoftwareSerial * serial; //<----
>>   ...
>> };
>>
>> Wenn ich an der markierten Stelle ein Sternchen einfüge, wird ohne
>> Fehler compiliert. Testen, ob es wirklich funktioniert, kann ich gerade
>> nicht, habe keinen Arduino in Reichweite, das muss bis Montag warten.
>> Mit diesem Detail von C++ muss ich mich wohl noch befassen ... :-)
>
> Mit new wird eine Instanz auf dem Heap angelegt, zurueck kommt ein
> Zeiger, also SoftwareSerial* und nicht wie bei dir ursprünglich
> SoftwareSerial
>
> C++ Grundlagen und Pointer anschauen, new/delete usw.

Und wenn das verstanden wurde, drüber nachdenken, ob new da überhaupt 
erforderlich ist.

Oliver
(Firma: Q3) #7060855
Lesenswert?

mIstA schrieb:
> Frank E. schrieb:
>> Ne, sorry, die ist nicht besonders verständlich ...
>
> Frank E. schrieb:
>> Wenn ich an der markierten Stelle ein Sternchen einfüge, wird
>> ohne Fehler compiliert.
>
> War das jetzt eine göttliche Eingebung oder kann es sein, daß die
> Fehlermeldung gar nicht so unverständlich ist, wenn man sie nur mal
> genau liest?

Wenn ich ehrlich bin, eine Eingebung nach erneuter Recherche, das 
Sternchen sah ich bei Stack Overflow. Danach habe ich keine Zeit weiter 
darauf ver(sch)wendet, der Fehlermeldung auf den Grund zu gehen. Ich 
brauche den Code dringend für eine anstehende Aufgabe ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren