Hallo zusammen Ich habe grundsätzlich das AVR-net-io von Pollin und eine abgeänderte Radig Softare mit LCD von fleuri. ich möchte zwei float und 3 int zahlen am display anzeigen lassen. habe ich grundsätzlich gemacht jedoch sind die zahlen einmal einstellig und bis zu dreistellig und ich möchte haben das die einerstelle dieser zahlen am LCD immer an der gleichen stelle ausgegeben wird. die habe ich nun gemacht in dem ich zuerst den wert abfrage und danach dementsprechend den string schreibe. hier ein sinnhaftes beispiel float temp; hier steht die temperatur mit einer kommastelle und maximal 3 stellen vor dem komma , zwei stellen wert und ein eventuelles minus char tempstr[5]; if((temp < 100) && (temp > 10)) also zweistellig { tempstr[0] = ' ', dtostrf(temp,2,1,tempstr[2]); } . . . lcd_gotoxy(5,0);lcd_puts(tempstr); . . . so frage ich weiter bis ich alle möglichkeiten durch habe die es gibt Das mache ich bei allen zahlen. danach steht der Prozessor. wenn ich dies nur bei einer oder zwei zahlen mache geht es noch. wenn ich es mit allen zahlen die ich ausgeben will nach diesem Prinzip schreibe dann startet der Prozessor permanent neu. wie kann ich dies kürzer machen um den selben effekt zu erziehlen. Ich hoffe Ihr versteht was ich meine. Wenn ich den tempstr aufs display ausgebe und sie ist nur ein stellig wird es linksbündig ins dilay geschrieben ich möchte es jedoch an einer bestimmten stelle rechtsbündig schreiben. Im daten blatt meines displays(DEM16481 SYH-LY) habe ich jedoch nichts gefunden das ich von rechts nach links schreiben kann. Wie gehe ich am besten vor um dieses Ausgabeproblem zu lösen. Bitte um Info. mfg fler
Ich habe vergessen mit anzugeben das ich bei Compillieren bei jeder der oben genannten dtostrf funktion die fehlermeldung ../main.c:609: warning: passing argument 4 of 'dtostrf' makes pointer from integer without a cast bekomme. Also anscheinend gefällt im die art wie ich die funktion schreibe nicht. mfg Erich
Erich Floh wrote: > float temp; hier steht die temperatur mit einer kommastelle und > maximal 3 stellen vor dem komma , zwei stellen wert und ein eventuelles > minus Rechnen wir mal: 1 Kommastelle 1 Stelle für das Komma 3 Stellen vor dem Komma 1 obligatorisches '\0' für den String ------ 6 > char tempstr[5]; Der ist also schon mal um 1 Zeichen zu kurz. > if((temp < 100) && (temp > 10)) also zweistellig > { > tempstr[0] = ' ', > dtostrf(temp,2,1,tempstr[2]); tempstr[2] ist ein einzelner char Was du willst, ist die Adresse an der dieser char beginnen soll. &tempstr[2] Aber auch das hilft dir nicht viel. tempstr[0] enthält ein Leerzeichen tempstr[1] enthält .... irgendwas tempstr[2] ab dort beginnt dann deine Stringrepräsentierung. > so frage ich weiter bis ich alle möglichkeiten durch habe die es gibt > Das mache ich bei allen zahlen. Ziemlich umständlich. Lass dir doch einfach den String mal generieren. Danach siehst du nach wie lange der String geworden ist, und gibst vor dem String eine entsprechende Anzahl Leerzeichen aus. Und deine Formatierangaben beim dtostrf stimmen auch nicht. > dtostrf(temp,2,1,tempstr[2]); ^ | +-- das hier ist die Feldbreite: Also die Anzahl aller Zeichen insgesammt. Inklusive Dezimalpunkt und Vorzeichen
1 | char tempstr[10]; // hier ist kleckern meist kontraproduktiv |
2 | |
3 | dtostrf( temp, 5, 1, tempstr ); |
4 | |
5 | // wieviele Leerzeichen braucht man?
|
6 | AnzLeer = 5 - strlen( tempstr ); |
7 | for( i = 0; i < AnzLeer; ++i ) |
8 | lcd_putc( ' ' ); |
9 | lcd_puts( tempstr ); |
Für die Ausgabe der Leerzeichen gibt es auch noch einen kleinen Trick (Ich hoffe mal, dass ich mich jetzt nicht um 1 verzählt habe)
1 | char tempstr[10]; // hier ist kleckern meist kontraproduktiv |
2 | |
3 | dtostrf( temp, 5, 1, tempstr ); |
4 | |
5 | // wieviele Leerzeichen braucht man?
|
6 | lcd_puts( " " + strlen( tempstr ) ); |
7 | lcd_puts( tempstr ); |
Wenn du aber mit Pointern noch auf Kriegsfuss stehst, ist wahrscheinlich die Schleifenmethode für dich besser geeignet. Acch deshalb weil die Stringlänge in " " mit der gewünschten Feldbreite korrespondieren muss. Wenn man den Trick erst mal durchschaut hat, ist er ganz simpel, aber er ist für einen Neuling nicht leicht zu durchschauen.
Hallo Danke für die hilfe, es lauft, ich habe auch bei der dtostrf funktion falsche infos bekommen. mfg Erich
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.