Ich will ein kleines Display mit ST7735-Controller als Debug-Ausgabe nutzen. Dazu dachte ich mir: einfach in die vorhandene Serial-Variable ein neues Objekt zu hängen. Hier der anskizziert Prototyp.
Leider gibt es bereits beim Übersetzen einen Fehler, "error: expected type-specifier before " und ich scheitere furios an meinen rostigen C++-Kenntnissen.
#include <SoftwareSerial.h>
class ST7735Serial : public SoftwareSerial // oder Stream?
{
private:
public:
ST7735Serial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic = false);
void begin(uint16_t baud_count);
void end(void);
virtual int available(void);
virtual void accept(void);
virtual int peek(void);
virtual int read(void);
virtual void flush(void);
virtual size_t write(uint8_t);
using Print::write;
operator bool();
};
void ST7735Serial::flush()
{
}
int ST7735Serial::available()
{
return 0;
}
int ST7735Serial::peek()
{
return -1;
}
int ST7735Serial::read()
{
return -1;
}
// ?? virtual void accept(void);
size_t ST7735Serial::write(uint8_t) {
}
void ST7735Serial() {
}
void setup()
{
Serial = new ST7735Serial(); //<--- "error: expected type-specifier before "
}
void loop()
{
}
Serenifly:
Ich glaube er wollte die bestehende Serial Variable irgendwie überschreiben
Das geht für lokale Variable oder in einem anderen namespace, aber das willst du nicht wirklich, hole, denke ich
Bei der Gelegenheit könnte man nochmal fragen, was der Unterschied zur Basisklasse SoftwareSerial sein soll.
So wie es jetzt aussieht ist der Unterschied, dass ST7735Serial gar nichts macht.
Die Funktionen, die aus der Basisklasse unverändert übernommen werden ohne eigene Implementation, wie z.B. operator bool(),
sollten in der Klassendefinition gar nicht separat auftauchen, denke ich.
Hab mir mal
hardware\arduino\cores\arduino\HardwareSerial.h
angesehen. Wenn du in deiner .ino gleich am Anfang #define HardwareSerial_h
schreibst, wird die Original HardwareSerial.h nicht verwendet, und damit ist dann auch
[b] extern HardwareSerial Serial;[/b]
weg
#define HardwareSerial_h
#include <SoftwareSerial.h>
class Test : public SoftwareSerial{
public:
Test(byte rx, byte tx): SoftwareSerial(rx, tx) {}
};
Test Serial(3,4);
void setup() {
Serial.begin(9600);
}
void loop() {}
Mir wäre es lieber, zu verstehen, warum ich der Variable Serial nicht ein anderes Objekt zuweisen kann. Das ist m. E. viel schöner und entspräche dem Gedanken von Objekten.
Mir wäre es lieber, zu verstehen, warum ich der Variable Serial nicht ein anderes Objekt zuweisen kann.
Kannst du so doch, oder ?
Im Beispiel ist Serial eine Instanz der Klasse Test, die wiederum von SoftwareSerial abgeleitet ist..
Wenn (wie bei Standard-Arduino) HardwareSerial.h aktiv ist , ist Serial eben als ein Objekt der Klasse HardwareSerial deklariert. ( Und wird wohl von HardwareSerial.cpp global zur Verfügung gestellt, damit Arduino - Programmieren schön einfach ist. )
Entweder ich verstehe dein Problem nicht, oder da ist noch ein Haken, den ich gar nicht sehe.