INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Frage zum richtigen verwenden einer Funktion
10.04.2020, 13:52
Beitrag #1
Frage zum richtigen verwenden einer Funktion
Hallo,

ich möchte in einem Display bestimmte Informationen anzeigen lassen. Bisher sieht das wie folgt aus:
Code:
void DrawData(char title[], float data, int precision, int x, int y, bool sign) {
  Nav1.createSprite(30, 15);
  //Nav1.fillScreen(YELLOW);
  Nav1.setCursor(0, 0);
  Nav1.setTextColor(WHITE, BLACK);
  Nav1.println(title);
  Nav3.createSprite(55, 25);
  Nav3.setCursor(0, 0);
  Nav3.setTextColor(WHITE, BLACK);
  if ((VAR >= 0) && (sign)) {
    Nav3.print("+");
  }
  if ((VAR < 0) && (sign)) {
    Nav3.print(" -");
  }
  Nav3.println(data, precision);
  Nav1.pushSprite(x, y);
  Nav1.deleteSprite();
  Nav3.pushSprite(x + 30, y);
  Nav3.deleteSprite();
}

Aufgerufen wird sie wie folgt:
Code:
DrawData("MAC", abs(MAC), 1, 133, 220, false);

Jetzt hätte ich in der Anzeige statt MAC aber gerne je nach Einstellung etwas anders stehen. Daher habe ich die Zeile geändert:
Code:
void DrawData(char title[], String menu, float data, int precision, int x, int y, bool sign) {
  Nav1.createSprite(30, 15);
  //Nav1.fillScreen(YELLOW);
  Nav1.setCursor(0, 0);
  Nav1.setTextColor(WHITE, BLACK);
  Nav1.println(title);
  Nav3.createSprite(55, 25);
  Nav3.setCursor(0, 0);
  Nav3.setTextColor(WHITE, BLACK);
  if ((VAR >= 0) && (sign)) {
    Nav3.print("+");
  }
  if ((VAR < 0) && (sign)) {
    Nav3.print(" -");
  }
  Nav3.println(data, precision);
  Nav1.pushSprite(x, y);
  Nav1.deleteSprite();
  Nav3.pushSprite(x + 30, y);
  Nav3.deleteSprite();
}

Code:
DrawData(Menu, abs(MAC), 1, 133, 220, false);

Das führt aber zu einem Fehler:
Code:
Sketch:170:57: error: cannot convert 'String' to 'char*' for argument '1' to 'void DrawData(char*, String, float, int, int, int, bool)'
       DrawData(Menu, abs(MAC), 1, 133, 220, false);
                                                         ^
Sketch:182:57: error: cannot convert 'String' to 'char*' for argument '1' to 'void DrawData(char*, String, float, int, int, int, bool)'
       DrawData(Menu, abs(MAC), 1, 133, 220, false);
                                                         ^
exit status 1
cannot convert 'String' to 'char*' for argument '1' to 'void DrawData3(char*, String, float, int, int, int, bool)'
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2020, 14:14
Beitrag #2
RE: Frage zum richtigen verwenden einer Funktion
Die Funktion will ein char-Array, keinen String.

Du hast 2 Varianten:

- entweder die unsaubere, aber einfacher erscheinende menu.c_str(), die Dir evtl. später probleme macht

- oder Du arbeitest gleich mit char-Arrays (C-strings, nicht zu verwechseln mit der Klasse String)

Infos gibt es hier.

Du hast übrigens einen zusätzlichen Parameter in die Funktion geschrieben:
Code:
// alte Varinte
void DrawData(char title[], float data, int precision, int x, int y, bool sign) {
// Deine neue Variante: String menu ist unsinnig und wird nirgends ausgewertet
void DrawData(char title[], String menu, float data, int precision, int x, int y, bool sign) {

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2020, 19:15 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2020 19:15 von Gerdchen03.)
Beitrag #3
RE: Frage zum richtigen verwenden einer Funktion
Als Variante 1 meinst du ja das, oder?
Code:
void DrawData(char String menu.c_str(), float data, int precision, int x, int y, bool sign)

Aufruf:
Code:
DrawData(Menu, abs(MAC), 1, 133, 220, false);
Scheint nicht zu gehen:

Code:
Sketch:830:28: error: expected ',' or '...' before 'menu'
void DrawData(char String menu.c_str(), float data, int precision, int x, int y, bool sign) {
                            ^
/Users/dirk/Documents/Arduino/Sketch/Sketch.ino: In function 'void DrawData(char)':
Sketch:835:16: error: 'title' was not declared in this scope
   Nav1.println(title);
                ^
Sketch:839:22: error: 'sign' was not declared in this scope
   if ((VAR >= 0) && (sign)) {
                      ^
Sketch:842:21: error: 'sign' was not declared in this scope
   if ((VAR < 0) && (sign)) {
                     ^
Sketch:845:16: error: 'data' was not declared in this scope
   Nav3.println(data, precision);
                ^
Sketch:845:22: error: 'precision' was not declared in this scope
   Nav3.println(data, precision);
                      ^
Sketch:846:19: error: 'x' was not declared in this scope
   Nav1.pushSprite(x, y);
                   ^
Sketch:846:22: error: 'y' was not declared in this scope
   Nav1.pushSprite(x, y);
                      ^
exit status 1
expected ',' or '...' before 'menu'

Mit char array meinst du, dass statt dem String in die Zeile
Code:
void DrawData(char String menu.c_str(), float data, int precision, int x, int y, bool sign)
ein char array eingebaut werden muss? Das heißt also String zu char array wandeln?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2020, 19:37
Beitrag #4
RE: Frage zum richtigen verwenden einer Funktion
Dir fehlen einige fundamentale Grundlagen. Da solltest Du dringend nacharbeiten.

Du musst unterscheiden zwischen der Deklaration/Definition einer Funktion und deren Nutzung.

Code:
// Deklaration/Definition
void DrawData(char title[], float data, int precision, int x, int y, bool sign)
// oder
void DrawData(char *title, float data, int precision, int x, int y, bool sign)

// Nutzung wenn Du Dir die Probleme mit String antun willst
DrawData(menu.c_str(), abs(MAC), 1, 133, 220, false);

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Frage zu Delay-Alternative Holzwurm56 11 394 17.01.2021 12:33
Letzter Beitrag: Natsnok
  Füllstand mit RGB visualisieren [FRAGE] Dukopfo 3 267 27.12.2020 13:53
Letzter Beitrag: Tommy56
  funktion im loop nur einmal ausführen Thor Wallhall 6 318 26.12.2020 18:19
Letzter Beitrag: hotsystems
  ständiger Programmablauf ohne Funktion AnjinSan 9 671 06.12.2020 14:10
Letzter Beitrag: AnjinSan
  Auf Array einer Klasse zugreifen Nichtraucher 16 667 25.11.2020 20:26
Letzter Beitrag: Tommy56
  HTTP GET request mit ServerCertificateValidation & SecurityProtocol verwenden TBMSam 3 368 05.11.2020 14:33
Letzter Beitrag: Tommy56
  Frage zur <Adafruit_PWMServoDriver.h> Christian_Moba-Arduino 7 505 16.10.2020 12:32
Letzter Beitrag: Tommy56
  Generelle Frage zum Schlafen legen DO3GE 3 434 02.10.2020 10:56
Letzter Beitrag: Tommy56
  NRF24I01 Empfangenen Text in einer Var. speichern zebrazehn 10 904 19.09.2020 12:54
Letzter Beitrag: hotsystems
  Batterie Innenwiderstand messen - If, Else in einer If, Else Anweisung Wuschi 32 2.687 15.08.2020 11:22
Letzter Beitrag: Franz54

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste