Go Down

Topic: [solved] Nochmal ein Problem mit Definition/Deklaration (Read 904 times) previous topic - next topic

hk007

Hi,

bräuchte mal wieder eure Hilfe.
Ich habe mir für die Ausgabe auf einem LCD-Bildschirm eine GLCD.cpp geschrieben.
Allerdings habe ich da noch ein Problem, wo ich jetzt wieder nicht weiter komme.

Mein Code sieht dafür in Ausschnitten so aus:
Code: [Select]
// Header.h
  extern int GLCD_Page; // Aktuelle LCD-Seite
  void GLCD_Setup();
  void GLCD_Loop();

// GLCD.cpp
#include "Header.h"
#define TFT_DC 3
#define TFT_CS 15
char deg = char(247);
int GLCD_Page;

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

void GLCD_Page1();
void GLCD_Page2();
void GLCD_Page3();
void GLCD_Page4();
void GLCD_Page5();

void GLCD_Setup (){
  tft.begin();
  tft.setRotation(0); // (0-3)
  tft.fillScreen(ILI9341_BLACK);
}

void GLCD_Loop() {
   tft.fillRoundRect(125,0,100,150,20, ILI9341_WHITE);   // --> Ausgabe auf dem Bildschirm OK
   void GLCD_Page1();
}

void GLCD_Page1(){
  tft.fillRoundRect(125,0,100,150,20, ILI9341_WHITE);   // --> keine Ausgabe auf dem Bildschirm
  tft.setCursor(0,5);  
  tft.setTextColor(ILI9341_WHITE,ILI9341_BLACK);     // --> keine Ausgabe auf dem Bildschirm
  tft.setTextSize(3);
  tft <<  _FLOAT(Temp[6],1) << deg << "C" <<endl;   // --> keine Ausgabe auf dem Bildschirm
  tft <<  _FLOAT(Temp[5],1) << deg << "C" <<endl;   // --> keine Ausgabe auf dem Bildschirm
  tft <<  _FLOAT(Temp[4],1) << deg << "C" <<endl;   // --> keine Ausgabe auf dem Bildschirm
  tft <<  _FLOAT(Temp[3],1) << deg << "C" <<endl;   // --> keine Ausgabe auf dem Bildschirm
  tft <<  _FLOAT(Temp[2],1) << deg << "C" <<endl;   // --> keine Ausgabe auf dem Bildschirm
  tft <<  _FLOAT(Temp[1],1) << deg << "C" <<endl;   // --> keine Ausgabe auf dem Bildschirm
}


Unter GLCD_Setup() wird das LCD initialisiert. Das passiert in void setup()
Der Programmteil GLCD_Loop() wird dann zyklisch alle x sek aufgerufen.
Darin möchte ich, abhängig von einer Variable, verschiedene Seiten darstellen.

Allerdings bekomme ich nur Ausgaben auf das TFT, wenn ich die Befehle direkt in die GLCD_Loop() schreibe.
Wenn ich dies in die GLCD_Page1() auslagere, dann kommt nichts auf dem Bildschirm.

Das kapiere ich nun gar nicht.
Arduino 1.8.8

hk007

#1
Dec 28, 2015, 08:41 pm Last Edit: Dec 28, 2015, 08:42 pm by hk007
Ohh mann vergesst es:

Wenn man so blöd ist, und die Funktion mit void...() aufruft.
Manchmal sieht man den Wald vor lauter Bäumen nicht.

Da such jetzt schon ne Stunde, und kaum trag ich alles für den Thread zusammen, da fällts wie Schuppen von den Augen.
Arduino 1.8.8

Serenifly

#2
Dec 28, 2015, 08:46 pm Last Edit: Dec 28, 2015, 08:59 pm by Serenifly
Abgesehen davon:

Header und .cpp Datei müssen den gleichen Namen haben.

Die #defines kommen auch in den Header. Genauso wie die Deklarationen der Page Funktionen

Außerdem ist die Idee eigentlich, dass der Header dann in einer *dritten* Datei inkludiert wird um die Funktionen der .cpp Datei dort zu nutzen.


Quote
Da such jetzt schon ne Stunde, und kaum trag ich alles für den Thread zusammen, da fällts wie Schuppen von den Augen.
https://en.wikipedia.org/wiki/Rubber_duck_debugging

Außerdem gibt es noch eine Geschichte wo Software Entwickler an ihrem Platz sitzen und ständig Leute kommen um ein Problem zu erklären, aber es dann beim Erklären selbst lösen ohne dass der Entwickler wirklich kapiert hat um was es geht.

uwefed

Ohh mann vergesst es:

Wenn man so blöd ist, und die Funktion mit void...() aufruft.
Manchmal sieht man den Wald vor lauter Bäumen nicht.

Da such jetzt schon ne Stunde, und kaum trag ich alles für den Thread zusammen, da fällts wie Schuppen von den Augen.
Siehst Du wie gut wir Dir geholfen haben? Wir brauchten nichtmal 1 Antwort, daß Du das Problem schon gefunden hattest.
Mann, sind wir gut!!  ;)  ;)  ;)

Mal im Erst: wie Serenifly sagt: Indem Du versucht hast, Dein Problem in Worte zu fassen, um es uns zu erklähren, hast Du Dich damit intensiv befaßt und bist so auf die Ursache des Fehlers gekommen.

Grüße Uwe

hk007

Abgesehen davon:

Header und .cpp Datei müssen den gleichen Namen haben.

Die #defines kommen auch in den Header. Genauso wie die Deklarationen der Page Funktionen

Außerdem ist die Idee eigentlich, dass der Header dann in einer *dritten* Datei inkludiert wird um die Funktionen der .cpp Datei dort zu nutzen.
Musst du anders sehen.

In der Header.h sind nur Globale Definitionen.
Code: [Select]
 extern int GLCD_Page; // Aktuelle LCD-Seite
  void GLCD_Setup();
  void GLCD_Loop();

Das (und anderes) steht da drin, damit ich es von anderen cpps oder auch der main.ino aufrufen kann.


@Uwefed:
Was glaubst du wie stolz ich bin es selber gefunden zu haben.... muahaha
War ja auch dämlich genug den Fehler zu machen.  :)
Arduino 1.8.8

Go Up