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
intTemp;
2
inth=0;
3
intAnzeige=0;
4
unsignedcharNutzdaten[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?
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
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?
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?
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?
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.
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);
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...
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