Forum: Projekte & Code Turtlegrafik: Interpreter, Creator & Designer
Bei einem Projekt bei dem in einem Controller nicht mehr wirklich viel
Flashspeicher vorhanden war, wollte ich dennoch auf einem verwendeten
TFT-SPI Display noch etwas Grafik darstellen, was aufgrund der
Speichergröße von Bitmaps nicht mehr möglich war.
Entsinnend an uralte Zeiten (sogar noch prä-MS-DOS) gab es etwas das
sich Turtlegrafik nannte. Daran erinnernd habe ich einen (sehr) kleinen
aber auch einfachen Interpreter für Mikrocontroller geschrieben, der
Zeichenkommandos in einem String beinhaltet und entsprechend diese
Zeichenkommandos auf dem Display zeichnet. Den grundsätzlichen
Interpreter habe ich schon vor einer weile geschrieben, aber jetzt habe
ich den doch wieder gebraucht (um ein stylisiertes Thermometer
darzustellen) und fand es heute wie damals mühselig, di Grafikkommandos
von Hand einzugeben. Also habe ich den Interpreter überarbeitet und
-viel aufwändiger- ein HTML-Tool geschrieben, mit dem man Turtlegrafiken
für meinen proprietären Interpreter generieren kann.
Bevor ich hier jetzt weiterschreibe, die Links, auf der das zu finden
ist:
Beschreibung von Turtlegrafik grundsätzlich:
https://www.jjflash.de/turtlegraphics.html
Link zum Creator und Generator: https://www.jjflash.de/turtledraw.html
Grundsätzlich wäre es jedoch ganz nett, ihr geht auf die Seite
https://www.jjflash.de , dort gibt es die gesamte Webseite und man kann
dort im Frame auch die Turtlebeschreibung und den Generator anklicken
und das ganze im Contentfenster eines Framesets anschauen.
Die Beschreibung von Turtlegrafik findet ihr auch hier im Textanhang als
reines Textdokument.
Den Interpreter habe ich hier ganz bewußt nicht als .h / .c Kombination
eingestellt, weil es nicht klar ist, auf welcher Zielplattform er laufen
soll.
Grundsätzlich kann der Interpreter mittels copy & paste in jeden
Quelltext eingefügt werden. Damit der Interpreter arbeiten kann,
benötigt es im Programm eine Funktion Putpixel. Der Prototyp von
putpixel muß folgenden Prototyp haben: 1 | void putpixel(int x, int y, uint16_t color);
|
x,y bezeichnet die Bildschirmkoordinate an der ein Pixel ausgegeben
wird. 0,0 bezeichnet die linke obere Ecke
color bezeichnet einen 16-Bit Farbwert im Format RGB565, mit dem ein
Pixel gezeichnet wird
Verwendungsbeispiel des Interpreters:
Zeichne ab absoluter Koordinate 50,30 ein Rechteck mit der RGB-Farbe
rot= 255, grün= 128, blau= 20 und einer Breite von 60 Pixel mit einer
Höhe von 40 Pixel. Auch wenn ein Rechteck mit Anweisung r 60,40
gezeichnet werden könnte werden hier die Kommandos für r, l, u, d
verwendet um die Anwendung des Interpreters zu zeigen
Code für Controller mit linearem Adressraum (nicht AVR): 1 | static const char rechteck[] = "P50,30 C255,128,20 r60 d40 l60 u40";
| 2 | cmd_parse(&rechteck[0]);
|
Obiger Code ist zwar auch auf einem AVR-Mikrocontroller ausführbar wenn
die Source für NICHT-AVR verwendet wird, hat aber den Nachteil, dass
trotz der Angabe von static const eine Kopie des Strings im RAM abgelegt
wird. Aus diesem Grund soll die Source für AVR-Controller verwendet
werden (die einem in progmem abgelegten String erwartet): 1 | static const char rechteck[] PROGMEM = "P50,30 C255,128,20 r60 d40 l60 40";
| 2 | cmd_parse(&rechteck[0]);
|
:-) weil das händische Erstellen einer Turtlegrafik aufwändig ist, hilft
einem oben genannter Creator & Generator weiter.
Hier "just for fun" ein C-Arraystring, das von hier kopiert und beim
Creator importiert werden kann: 1 | char cmd[] = "P80,38 C255,179,102 K36 d4 C255,80,80 k20 M0,1 k20 C255,0,0 M0,1 k20 M-21,0 C255,179,102"
| 2 | "T42,-23 M36,-19 c15 K7 M-31,0 c15 K7 M-2,1 C91,91,255 K4 M31,0 K4 M-13,13 C231,63,20 K7"
| 3 | "M-2,1 C237,126,114 K4 c6 M-65,-26 K6 c2 M14,24 K4 c1 M-14,18 K3 M25,7 c8 K3 c4 M98,4 K9"
| 4 | "C189,95,0 M10,-25 K4 c5 M-24,-24 K7 c6 M26,-1 K5 M-134,-2 c14 K4 M14,24 c10 K2 M-14,18"
| 5 | "C149,149,255 K1 M25,7 c15 K2 M99,4 C255,128,128 K6 c14 M9,-25 M0,0 K3 M2,-25 C255,179,102"
| 6 | "K3 M-25,1 C255,128,255 K5";
|
Wer es brauchen kann, viel Spaß damit (ich hab da gestern beim Erstellen
gerne damit gespielt).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|