Forum: Mikrocontroller und Digitale Elektronik Wert an TFT Display ausgeben


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von TiMa (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich möchte eine dezimal Wert auf meinem Sain Smart TFT Display ausgeben.

habe in meinen Programm folgende Zeile:

Serial.print(Wert, DEC);

dieser Wert wird jetzt ganz normal im Serial Monitor als Dezimalzahl 
angezeigt.

muss ja dann mit der Funktion myglcd.print arbeiten, richtig?

Hat jemand einen Tip wie ich das über das TFT Diplay lösen kann?

vielen dank im Voraus

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
TiMa schrieb:
> ich möchte eine dezimal Wert auf meinem Sain Smart TFT Display ausgeben.
Womit? Mit welcher Plattform? Welcher Programmiersprache? Welcher 
Entwicklungsumgebung?

von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
TiMa schrieb:

> Hat jemand einen Tip wie ich das über das TFT Diplay lösen kann?

Hast du denn zu deinem Display keine Software dazu gekriegt?

Da wird es ja wohl in typischer Arduino Manier eine fix&fertig 
vorgefertigte Klasse geben, die in deinem Programm dieses Display 
repräsentiert. In dieser Klasse siehst du mal nach, was die dir als 
Ausgabefunktionen zur Verfügung stellt.

von TiMa (Gast)


Bewertung
0 lesenswert
nicht lesenswert
es handelt sich um die normale Arduino Entwicklungsumgebung.

eine Software habe ich leider nicht dazu bekommen :/

von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
TiMa schrieb:
> es handelt sich um die normale Arduino Entwicklungsumgebung.
>
> eine Software habe ich leider nicht dazu bekommen :/

Dann musst du dir eben eine im Web suchen.
Du bist ja schliesslich nicht der erste, der dieses LCD mit einem 
Arudino benutzt. Sieh dir halt mal bei anderen an, welche Arduino Lib 
die benutzen und warum.

Hier zb
http://www.mathias-wilhelm.de/arduino/beispiele/lcd-graphic-displays/
gibt es ein paar Tips. Es gibt aber auch noch jede Menge anderer 
Webseiten, die sich bei Google mit dem Suchbegriff "sainsmart tft 
arduino library" finden lassen.

Willkommen in der Welt der Großen, in der man auch mal selber aktiv 
werden muss.

: Bearbeitet durch Moderator
von TiMa (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ok alles klar..

habe gerade schone eine Funktion gefunden:

myGLCD.print("Wert: (DEZ)", CENTER, 290);

mit der werde ich es mal ausprobieren.

von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Das hier
http://arduino.cc/en/Reference/TFTLibrary
könnte auch interessant sein.

Ich sag absichtlich könnte, weil ich auch erst mal recherchieren müsste, 
ob dein spezifisches SeinMart da mit reinfällt.

von TiMa (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ok

danke euch erstmal dafür..

Grüße

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
TiMa schrieb:
> myglcd.print arbeiten, richtig?

hmm, myglcd und TFT passt nicht zusammen

für myglcd gilt:
myGLCD.print("OCRxA= ", LEFT, 16); // Text -> String
myGLCD.printNumI( OCRxA, (6*9), 16, 5, ' '); // numerisch

man beachte den Unterschied zu *myGLCD.print* und *myGLCD.printNumI*

TiMa schrieb:
> jemand einen Tip wie ich das über das TFT Diplay lösen kann?
tft.println(F("-0,1234567"));  // Text -> String
tft.println(mass2string(dezi_mass1)); // numerisch in string umwandeln
.......

// vielleicht etwas umständlich aber es funktioniert, bbin kein softie
char *mass2string(uint16_t mass)
{ char _tmp[MAX_STRING]={0};
  char _tmp2[MAX_STRING]={0};
  char *ptr_chr;

  strcpy(_tmp, insert_char(trimm_string('0', utoa(mass, _tmp, 10), 4), ',', 3));
  ptr_chr=_tmp;
  while(*ptr_chr)
  { if(*ptr_chr == '0' && *((char *)(ptr_chr+1)) !=',')
      *ptr_chr == ' ';
    else
      break;
    ptr_chr++;
  }
  strcpy(_tmp2, ptr_chr);
  strcpy(_tmp, trimm_string(32, _tmp2, 5));
  return _tmp;
}


von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:

> // vielleicht etwas umständlich aber es funktioniert, bbin kein softie
Nö
Es scheint nur so, dass es funktioniert.

> char *mass2string(uint16_t mass)
> { char _tmp[MAX_STRING]={0};
> ....
>   return _tmp;
> }

Die Adresse einer funktionslokalen Variable zurückzugeben ist ein 
absolutes No-No. Wird die Funktion verlassen, dann existiert diese 
Variable nicht mehr. Der Aufrufer hat dann eine Speicheradresse zu einer 
Variablen, die es nicht mehr gibt. Je nachdem, was in der Zwischenzeit 
mit dem Speicher alles gemacht wird (was teilweise ausserhalb der 
Kontrolle des Programmierers liegt) kann alles mögliche passieren. Alles 
mögliche beinhaltet auch "Funktioniert wie erwartet" - ist aber trotzdem 
falsch.

von Arduinoquäler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Karl Heinz schrieb:
> Die Adresse einer funktionslokalen Variable zurückzugeben ist ein
> absolutes No-No.

Wenn man sie (die lokale) aber static macht dann ist es sicher.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Arduinoquäler schrieb:
> Wenn man sie (die lokale) aber static macht dann ist es sicher.
Trotzdem ist es Murks, wenn man auf diese Art eine lokale Variable 
global verfügbar macht. Das ist etwa die Ebene, wo man auch mit GOTO im 
Programm hin und herspringt...

: Bearbeitet durch Moderator
von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Karl Heinz schrieb:
> Nö
> Es scheint nur so, dass es funktioniert.

jau da hatte ich auch schon mal Kummer ohne zu wissen warum

Arduinoquäler schrieb:
> Wenn man sie (die lokale) aber static macht dann ist es sicher.

auch das hatte ich schon mal versucht, aber static klaut eben Speicher 
und ich dachte ich könnte den sparen und habe static wieder ausgebaut 
und zumindest sah es so aus als wenn es geht.

Verdammt ich werde nie echter softie, wie können Funktionen Variablen 
zurückgeben ohne ewig den temporären Speicher zu blockieren?

: Bearbeitet durch User
von Karl H. (kbuchegg) (Moderator)


Bewertung
1 lesenswert
nicht lesenswert
Joachim B. schrieb:

> Verdammt ich werde nie echter softie, wie können Funktionen Variablen
> zurückgeben ohne ewig den temporären Speicher zu blockieren?

In C zb dadurch, dass nicht die Funktion den Speicher hält, sondern der 
Aufrufer dafür zuständig ist, entsprechenden Speicher bereit zu stellen, 
in den die Funktion reinschreiben kann.
Oder warum denkst du, musst du bei zb utoa oder auch sprintf das genau 
so machen?

: Bearbeitet durch Moderator
von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Karl Heinz schrieb:
> In C zb dadurch, dass nicht die Funktion den Speicher hält, sondern der
> Aufrufer dafür zuständig ist, entsprechenden Speicher bereit zu stellen,
> in den die Funktion reinschreiben kann.
> Oder warum denkst du, musst du bei zb utoa oder auch sprintf das genau
> so machen?

jetzt wo du es sagst :-)

und trotzdem wäre ja der Speicher reserviert und fehlt dem RAM, OK man 
könnte ihn mehrfach verwenden, bei einer Textzeile ist es ja 
überschaubar, nur Mehrfachnutzung der Funktion mit nur einem temporären 
Speicher geht halt nicht.

danke für den Denkanstoß

von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:

> könnte ihn mehrfach verwenden, bei einer Textzeile ist es ja
> überschaubar, nur Mehrfachnutzung der Funktion mit nur einem temporären
> Speicher geht halt nicht.

Yep.
Jetzt hast du zb erkannt, was das große Problem von strtok ist und warum 
da eine 2.te Version strtok_r 'nachgebessert' wurde.
char *strtok(char *str, const char *delim);
char *strtok_r(char *str, const char *delim, char **saveptr);

(Die Argumentliste erzählt eigentlich schon die ganze Geschichte, wenn 
man sie lesen kann :-)

: Bearbeitet durch Moderator
von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Karl Heinz schrieb:
> Yep.
> Jetzt hast du zb erkannt, was das große Problem von strtok ist und warum
> da eine 2.te Version strtok_r 'nachgebessert' wurde.

wobei das r irritiert, denkt man sofort an reverse wie bei

strstr zu strrstr, wobei ich lernen musste das gcc strrstr nicht kennt, 
ist das ein Mist mit der Inkompatiblität von C.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.