|
Turtlegrafik ist ein einfaches Zeichenprinzip, bei dem eine virtuelle sogenannte "Schildkröte" (Turtle / Zeichenstift) sich
über eine Fläche bewegt und dabei Linien und Formen (hier Rechteck und Kreis) zeichnen kann.
Hierbei zeichnet die Turtle ausgehend von der aktuellen Position das vorgegebene Zeichenkommando und setzt bei Linienkommandos eine neue aktuelle Zeichenposition (von der aus dann ein nachfolgendes Zeichenkommando ausgeht). Eine Ausnahme hiervon ist ein Zeichenkommando für Rechteck und Kreis (egal ob gefüllt oder ungefüllt), bei der die aktuelle Position der Turtle beibehalten wird. Werden nach diesem Prinzip Grafiken dargstellt, so ist dies im Vergleich zu Bitmap basierender Anzeige extrem speichersparend und kann immer dann eingesetzt werden, wenn Flashspeicher bereits knapp ist. Auf diesem Turtleprinzip basierend wurde ein einfacher Interpreter mit proprietären Turtlekommandos geschrieben, der in einem Mikrocontroller ausgeführt wird. Grundsätzlich sollte der Interpreter auf jedem Mikrocontroller funktionsfähig sein, der zum einen ein angeschaltetes Farbdisplay, zum anderen eine Funktion "putpixel" bereitstellt, über das der Interpreter seine Ausgaben tätigt. Jede Zeichnung wird durch eine Folge von Kommandos im Textformat (C-Stringarray) beschrieben. Der Interpreter ist sehr speicherplatzsparend, auf einem CH32V003 mit CH32FUN-Framework und riscv-none-elf-gcc Version 14.2 beträgt der Speicherbedarf 1910 Byte (bei AVR-Mikrocontrollern etwas mehr).
Der Interpreter ist als kompakter C-Source verfügbar und kann direkt in eigene Projekte kopiert werden werden: Der zur Ausgabe einer Turtlegrafik benötigte Putpixel-Prototyp, der vom Programm in den der Turtleinterpreter eingebettet wird, lautet: void putpixel(int x, int y, uint16_t color);
void cmd_parse(const char *str);
static const char rechteck[] = "P50,30 C255,128,20 r60 d40 l60 u40"; 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): static const char rechteck[] PROGMEM = "P50,30 C255,128,20 r60 d40 l60 u40"; cmd_parse(&rechteck[0]);Aufgrund dessen, dass Erstellen einer Turtlegrafik von Hand zu erstellen sehr mühselig ist, wurde eine "Turtlegrafik-Creator" geschaffen, mit dem es möglich ist, sehr einfach online im Web-Browser eine Turtlegrafik zu erstellen. Dort kann die Grafik mit der Mouse gezeichnet werden und als fertiges C- Stringarray in das Clipboard exportiert werden, so dass dieses nur in einen Quellcode eingefügt werden muß. Zum Onlinetool geht es hier: Turtlegrafik Creator & Generator |
||||||||||||||||||||||||||||||||