Wert an TFT Display ausgeben

Gast #4048529
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
#4048538
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.
#4048550
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.
#4048646
Lesenswert?

TiMa schrieb:
> myglcd.print arbeiten, richtig?

hmm, myglcd und TFT passt nicht zusammen

für myglcd gilt:
1
myGLCD.print("OCRxA= ", LEFT, 16); // Text -> String
2
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?
1
tft.println(F("-0,1234567"));  // Text -> String
2
tft.println(mass2string(dezi_mass1)); // numerisch in string umwandeln
3
.......
4

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

11
  strcpy(_tmp, insert_char(trimm_string('0', utoa(mass, _tmp, 10), 4), ',', 3));
12
  ptr_chr=_tmp;
13
  while(*ptr_chr)
14
  { if(*ptr_chr == '0' && *((char *)(ptr_chr+1)) !=',')
15
      *ptr_chr == ' ';
16
    else
17
      break;
18
    ptr_chr++;
19
  }
20
  strcpy(_tmp2, ptr_chr);
21
  strcpy(_tmp, trimm_string(32, _tmp2, 5));
22
  return _tmp;
23
}
#4048657
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.
#4048713
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?
#4048746
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?
#4048764
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ß
#4048770
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.
1
char *strtok(char *str, const char *delim);
2
char *strtok_r(char *str, const char *delim, char **saveptr);

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren