Forum: Projekte & Code Turtlegrafik: Interpreter, Creator & Designer


von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

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.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.