Pages: [1]   Go Down
Author Topic: Serial ersetzen  (Read 587 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 2
Posts: 48
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:
#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()
{
}

Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tja, da muss ich dem Compiler leider recht geben

Code:
  Serial = new ST7735Serial();   //<--- "error: expected type-specifier before "

verstehe ich auch nicht. Meinst du etwa

Code:
ST7735Serial mySerial(3,4);  // Eine Instanz der Klasse ST7735Serial  mit ReceivePin = 3, TransmitPin =4
Logged

Offline Offline
Faraday Member
**
Karma: 128
Posts: 4129
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich glaube er wollte die bestehende Serial Variable irgendwie überschreiben
Logged

0
Offline Offline
Newbie
*
Karma: 2
Posts: 48
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Ich glaube er wollte die bestehende Serial Variable irgendwie überschreiben
Das glaube ich auch!
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink

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.
Logged

0
Offline Offline
Newbie
*
Karma: 2
Posts: 48
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Doch, genau das will ich.

Ziel ist es, alle Serial.print() im Code lassen zu können und die Ausgaben auf das Display umzulenken.

Dass das ST7735Serial  noch nichts macht liegt im Kern daran, dass ich top-down programmiere.
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
   extern HardwareSerial Serial;
weg

Code:
#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() {}
Das compiliert zumindest.
Logged

0
Offline Offline
Newbie
*
Karma: 2
Posts: 48
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja, das klappt,  danke!

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.
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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.
Logged

Pages: [1]   Go Up
Jump to: