Forum: Mikrocontroller und Digitale Elektronik Temperaturwerte auf LCD anzeigen Ausgabeprobleme!


von Christian Hohmann (Gast)


Lesenswert?

Hallo Leute brauch nochmal eine klitzkleine Hilfestellung.
Also empfange Temperaturwerte über die Serielle, welche ich in einem 
Array abspeichere.
Nun möchte ich mir die Werte auf einem Display anzeigen lassen.
Leider Zeigt er mir die Werte als Ascii an, möchte sie aber als Decimal 
dargestellt haben.
Wie geht das nun richtig, hab schon mehrere Sachen durchprobiert.
Hier mal mein Quellcode
1
int Temp;
2
  int h =0;
3
  int Anzeige =0;
4
    unsigned char Nutzdaten[60];
.
.
.
1
          else
2
          {
3
           if(Anzeige ==0)
4
           {
5
             lcd_clear();
6
             lcd_set_cursor(0,LINE0);
7
             lcd_puts(small_font,"Status:");
8
             lcd_set_cursor(0,LINE1);
9
             lcd_puts(small_font,"Kesseltemp.:");
10
             lcd_set_cursor(0,LINE2);
11
             lcd_puts(small_font,"Boilertemp.:");
12
             lcd_set_cursor(0,LINE3);
13
             lcd_puts(small_font,"Puffertemp.:");
14
             Anzeige = 1;
15
           }
16
           lcd_set_cursor(100,LINE0);
17
           Temp = atoi(Nutzdaten[1]);
18
           lcd_putc(small_font,Temp);
19
           lcd_set_cursor(100,LINE1);
20
           Temp = atoi(Nutzdaten[7]);
21
           lcd_putc(small_font,Temp);
22
           lcd_set_cursor(100,LINE2);
23
           Temp = Nutzdaten[33];
24
           lcd_putc(small_font,Temp);
25
           lcd_set_cursor(100,LINE3);
26
           Temp = Nutzdaten[29];
27
           lcd_putc(small_font,Temp);
28
          }
29
        //Anzeige Ende

Ich werd da warscheinlich nicht mit Putc arbeiten können da er mir da ja 
immer nur eine zahl schreiben wird, aber die Tempwerte sind ja 2 bis 3 
Stellig also entweder ne Schleife mit Putc oder wie beim Text puts.
Aber weis ned wie ich da jetzt rangehen soll.
Könnt ihr mir nochmal helfen Bitte?

von MaWin (Gast)


Lesenswert?

char temp[7];

itoa(Nutzdaten[1],temp,10);
lcd_puts(small_font,temp);

von Micha (Gast)


Lesenswert?

Hallo Christian,

wenn du die Temperaturwerte in Nutzdaten[] hintereinander abgespeichert 
hast, mußt du erst die Werte in eine Hilfsvariable zB. s_Temp[7] 
zeichenweise übertragen. Dann kannst du s_Temp mit lcd_puts() ausgeben.
Das atoi() kannst du dir sparen, weil die Temperatur ja schon als 
Zeichenkette vorliegt.
Evtl. kannst du die Ausgabe noch formatieren mit sprintf() - das braucht 
aber viel Speicher.

Gruß Micha

von Chris T. (chris0086)


Lesenswert?

Danke für die Antworten.
Es funktioniert schonmal ein wenig aber ich muss auch noch die Werte 
durch 2 teilen damit sie richtig werden(ist leider so)
bis jetzt hab ich :
1
lcd_set_cursor(100,LINE0);
2
           itoa(Nutzdaten[1],Temp,10);
3
           lcd_puts(small_font,Temp);
4
           lcd_set_cursor(100,LINE1);
5
           itoa(Nutzdaten[7],Temp,10);
6
           lcd_puts(small_font,Temp);
7
           lcd_set_cursor(100,LINE2);
8
           itoa(Nutzdaten[33],Temp,10);
9
            lcd_puts(small_font,Temp);
10
           lcd_set_cursor(100,LINE3);
11
           itoa(Nutzdaten[29],Temp,10);
12
           lcd_puts(small_font,Temp);
Wie kann ich jetzt noch die Werte durch 2 teilen und dann anzeigen?

von Chris T. (chris0086)


Lesenswert?

was ich auch noch nicht ganz verstehe : warum ist das Array Temp 7 
Felder groß?

Noch was auf dem LCD wird hinter jedem Wert noch eine weitere Zahl 
angezeigt, wo kommt die her?

von Christian Hohmann (Gast)


Lesenswert?

was ich auch noch nicht ganz verstehe : warum ist das Array Temp 7
Felder groß?

Noch was auf dem LCD wird hinter jedem Wert noch eine weitere Zahl
angezeigt, wo kommt die her?

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Einmal reicht.

Christian Hohmann schrieb:
> was ich auch noch nicht ganz verstehe : warum ist das Array Temp 7
> Felder groß?
Wahrscheinlich um ein komplettes Int plus Stringende als Text aufnehmen 
zu können.

> Noch was auf dem LCD wird hinter jedem Wert noch eine weitere Zahl
> angezeigt, wo kommt die her?

Ich verstehe noch nicht, was genau in Nutzdaten abgelegt ist. Laut 
Variablendeklararion ist es ein String mit 59 Zeichen Länge.

Nutzdaten[33] ist das 34. Char (= 8 Bit) in diesem Array.

itoa wandelt aber einen Int in einen String. Ich würde jetzt eine 
Warnung erwarten, wenn ein Char anstelle eines Int übergeben wird. 
Könnte aber mit interner Typenwandlung auch so funktionieren. In Temp 
werden dann die Zahlen 0..255 (oder -128..127) landen, welche dann auch 
angezeigt werden.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Christian Hohmann schrieb:
> Danke für die Antworten.
> Es funktioniert schonmal ein wenig aber ich muss auch noch die Werte
> durch 2 teilen damit sie richtig werden(ist leider so)
Wenn Nutzdaten[33] als Char, den Wert * 2 enthält, dann folgendermaßen:

itoa(Nutzdaten[1] >> 1,Temp,10);

von Der verrückte Professor (Gast)


Lesenswert?

Hallo,
ich Arbeite gerade an etwas ganz ähnlichem...

Schön dass andere auch noch die HZ- Temperaturen iteressiert...


Nur mach ich noch ne übertragung mir tein, so dass mein Display im Fluhr 
oben im Wohnraum sitzt...

von Christian Hohmann (Gast)


Lesenswert?

Ja das machts bei mir auch aber läuf dann über KNX :-)
Also in Nutzdaten[...] steht imer ein Wert z.Bsp: Hex 38 , davon will 
ich den Decimal Wert angezeigt bekommen also 56 bzw. 28 wenn man noch 
durch zwei teielt. mehr steht da nicht drin also auch kein Endzeichen 
oder sowas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.